需求:
查询数据库的到多条据,将每一行数据相加求和,得到sum,在jsp中跟据sum总和排序。
首先,我是用Page<Analysis> page 去接受返回值,在controller层进行数据处理。List<Analysis> list = page.getList();得到要处理的数据集合。
我的思路是先将lsit中的对象排序(得到从小到大的排序),然后将list中的对象倒序.(如有·其他方案请在评论区展现)
附上自己的代码:
package com.wolfking.jeesite.manger.statistics.web;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.wolfking.jeesite.common.persistence.Page;
import com.wolfking.jeesite.common.web.BaseController;
import com.wolfking.jeesite.manger.meeting.service.MeetingService;
import com.wolfking.jeesite.manger.statistics.entity.Analysis;
import com.wolfking.jeesite.manger.statistics.service.AnalysisService;
import com.wolfking.jeesite.manger.statistics.service.RankingService;
import com.wolfking.jeesite.modules.sys.service.SystemService;
/**
* @author 20530
*统计排名
*/
@Controller
@RequestMapping(value = "${adminPath}/statistical/ranking")
public class RankingController extends BaseController{
@Autowired
private MeetingService meetingService;
@Autowired
private SystemService systemService;
@Autowired
private RankingService rankingService;
@RequiresPermissions("statistical:analysis:view")
@RequestMapping(value = {"list", ""})
public String list(Analysis analysis, HttpServletRequest request, HttpServletResponse response, Model model) {
analysis.setPassStatus(1);
analysis.setCompanyId("1");
Page<Analysis> page = rankingService.findPageExeam(new Page<Analysis>(request, response),analysis);
List<Analysis> list = page.getList();
if(!list.isEmpty()){
int size = list.size();
int i = 0;
for (Analysis analysis2 : list) {
if(i>size){
break;
}
Integer sum = analysis2.getPartyBigMeeting()+analysis2.getEbranch()+
analysis2.getPartyGroup()+analysis2.getPartyLecture()+analysis2.getOther();
page.getList().get(i).setSum(sum);
i++;
}
}
sortIntMethod(page.getList());
Collections.reverse(page.getList());
model.addAttribute("page", page);
return "manger/statistical/ranking";
}
/**
* 按照List中的某个Int类型的属性进行排序
* @param list
*/
@SuppressWarnings("unchecked")
public static void sortIntMethod(List list){
Collections.sort(list, new Comparator(){
@Override
public int compare(Object o1, Object o2) {
Analysis stu1=(Analysis)o1;
Analysis stu2=(Analysis)o2;
if(stu1.getSum()>stu2.getSum()){
return 1;
}else if(stu1.getSum()==stu2.getSum()){
return 0;
}else{
return -1;
}
}
});
}
}
参考:
https://blog.csdn.net/sdzhangshulong/article/details/52191454
暂存一部分待用
/**
* 按照List中的某个String类型的属性进行排序
* @param list
*/
@SuppressWarnings("unchecked")
public static void sortStringMethod(List list){
Collections.sort(list, new Comparator(){
@Override
public int compare(Object o1, Object o2) {
Student stu1=(Student)o1;
Student stu2=(Student)o2;
return stu1.getName().compareTo(stu2.getName());
}
});
System.out.println("/////////////排序之后///////////////");
for(int i=0;i<list.size();i++){
Student st=(Student)list.get(i);
System.out.println("st.age="+st.getAge()+",st.name="+st.getName());
}
}
/**
* 使用java.text.RuleBasedCollator来实现,用来执行区分语言环境的String 比较:
* 按照List中的某个String类型的属性进行排序
* @param list
*/
@SuppressWarnings("unchecked")
public static void sortByRuleBasedCollator(List list){
Collections.sort(list, new Comparator(){
@Override
public int compare(Object o1, Object o2) {
return ((java.text.RuleBasedCollator)java.text.Collator.getInstance(java.util.Locale.CHINA)).compare(((Student)o1).getName(), ((Student)o2).getName());
}
});
System.out.println("/////////////排序之后///////////////");
for(int i=0;i<list.size();i++){
Student st=(Student)list.get(i);
System.out.println("st.age="+st.getAge()+",st.name="+st.getName());
}
}
我的运行结果:
cv大法不可怕,可怕的是不会cv大法。