将list集合中按照某个字段排序(从大到小),然后将list中的对象倒序

需求:

查询数据库的到多条据,将每一行数据相加求和,得到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大法。

猜你喜欢

转载自blog.csdn.net/weixin_39816740/article/details/84556924