1. 程式人生 > >【轉載】java List分組和排序處理 Map 應用

【轉載】java List分組和排序處理 Map 應用

  1. package com.common.main.mapAndList;  
  2. import java.util.ArrayList;  
  3. import java.util.HashMap;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7. /** 
  8.  * @author LiJianShe 
  9.  * @version 建立時間:Mar 19, 2010 3:33:35 PM 類說明:Student.java 
  10.  */
  11. publicclass Student {  
  12.     private String classId;  
  13.     private String studentId; // 學號
  14.     private String studentName; // 姓名
  15.     private String sex; // 性別 0 男 1 女
  16.     public String getClassId() {  
  17.         return classId;  
  18.     }  
  19.     publicvoid setClassId(String classId) {  
  20.         this.classId = classId;  
  21.     }  
  22.     public String getSex() {  
  23.         return
     sex;  
  24.     }  
  25.     publicvoid setSex(String sex) {  
  26.         this.sex = sex;  
  27.     }  
  28.     public String getStudentId() {  
  29.         return studentId;  
  30.     }  
  31.     publicvoid setStudentId(String studentId) {  
  32.         this.studentId = studentId;  
  33.     }  
  34.     public String getStudentName() {  
  35.         return
     studentName;  
  36.     }  
  37.     publicvoid setStudentName(String studentName) {  
  38.         this.studentName = studentName;  
  39.     }  
  40.     publicstaticvoid main(String[] args) {  
  41.         // TODO Auto-generated method stub
  42.         List studentAllList = null ;// 所以班級的學生
  43.         //步驟1
  44.         Map<String ,List> map = new HashMap<String ,List>();  
  45.         Map<String ,Object> mapLast = new HashMap<String ,Object>();  
  46. //      for(Student student : studentAllList){
  47.         for(Iterator it = studentAllList.iterator();it.hasNext();){  
  48.             Student student = (Student)it.next();  
  49.             if(map.containsKey(student.getClassId())){ //如果已經存在這個陣列,就放在這裡
  50.                 List studentList = map.get(student.getClassId());  
  51.                 studentList.add(student);  
  52.             }else{  
  53.                 List studentList = new ArrayList();  //重新宣告一個數組list
  54.                 studentList.add(student);  
  55.                 map.put(student.getClassId(), studentList);  
  56.             }  
  57.         }  
  58. //      步驟2 
  59. //      利用 處理1 步驟 分組完的資料 ,按性別 男/女  再次分組
  60.         for(Map.Entry<String, List> m: map.entrySet()){ //按鍵值遍歷 Map
  61.             Map mapList = new HashMap(); //
  62.             List studentSingle  = m.getValue(); //同一班級的學生,男女
  63.             List studentListMen = new ArrayList(); // 宣告一個存放男生的 list
  64.             List studentListWomen = new ArrayList(); // 宣告一個存放女生的 list
  65.             for(Iterator it = studentSingle .iterator();it.hasNext();){//遍歷
  66.                 Student student = (Student)it.next();  
  67.                 if("0".equals(student.getSex())){ //男生
  68.                     studentListMen.add(student);  //男生
  69.                 }else{  
  70.                     studentListWomen.add(student); //女生
  71.                 }  
  72.             }  
  73.             mapLast.put("班級", m.getKey());  
  74.             mapLast.put("學生 男", studentListMen);  
  75.         }  
  76.     }  
  77. }  
在一些應用中,需要將List中的物件按某種情況分組或者排序處理。做個小結如下: 



1.       如一個List中存放了ProductDoing物件,productDoing物件有rawTypeId 現在要求將rawTypeId分組處理。 



先用Map找出list中所有的分組: 



//原料型別組 

Map<Integer,String> groups = new HashMap<Integer,String>(); 

for(ProductDoingVo pd : products){ 

       groups.put(pd.getRawTypeId(),"");//這裡並沒有將該組的資料存入,看自己的需求吧 





接下來就可以對已知的分組處理。 

for(Integer rawTypeId : groups.keySet()){ 

for(ProductDoingVo pd : products){ 

   if(rawTypeId.equals(pd.getRawTypeId())){ 

              //處理該組的資料 

     } 








2.    如2個List中存放了map<String,String>物件, 一個map是一個條資料庫表記錄,key是資料庫表中的欄位名,value是欄位對應的值, map中操作時間的key_value, 需要將這2個List合併之後按map中的操作時間去排個序。。。。 



//先用addAll將list連線起來,合成一個List 

List result = new ArrayList();   

Collections.addAll(result, a);//假設a b即為那兩個list   

Collections.addAll(result, b);  



//實現一個Comparator就好了,根據map中的操作時間來排序 

   Collections.sort(result, new Comparator<Map>()   

      {   

            public int compare(Map o1, Map o2) {   

               Date date1 = (Date)o1.get("trackdatetime");   

               Date date2 = (Date)o2.get("trackdatetime");   

              return date1.compareTo(date2);   

          }   

});