1. 程式人生 > >將list集合中按照某個欄位排序(從大到小),然後將list中的物件倒序

將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大法。