JAVA中對List >根據map某個key值進行排序


方法
compareTo()
比較此對象與指定對象的順序。如果該對象小於、等於或大於指定對象,則分別返回負整數、零或正整數。
返回整數,1,-1,0;返回1表示大於,返回-1表示小於,返回0表示相等。


普通的Integer 類型key進行比較
public class java_ListMapSort {
    public static void main(String[] args) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> map1 = new HashMap<String, Object>();
        map1.put("name", "p");
        map1.put("cj", "5");
        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("name", "h");
        map2.put("cj", "12");
        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("name", "f");
        map3.put("cj", "31");
        list.add(map1);
        list.add(map3);
        list.add(map2);
        //排序前 
        for (Map<String, Object> map : list) {
            System.out.println(map.get("cj"));
        }
        Collections.sort(list, new Comparator<Map<String, Object>>() {
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                Integer name1 = Integer.valueOf(o1.get("cj").toString()) ;//name1是從你list里面拿出來的一個 
                Integer name2 = Integer.valueOf(o2.get("cj").toString()) ; //name1是從你list里面拿出來的第二個name
                return name1.compareTo(name2);
            }
        });
        //排序后 
        System.out.println("-------------------");
        for (Map<String, Object> map : list) {
            System.out.println(map.get("cj"));
        }
    }
}

 

 

中文字符比較:

要實現漢字按首字母排序,主要是設置語言環境,如下語句設置語言環境:

 

這里用到了Collator類,此類實現了Comparator接口,用他的getInstance就可以用指定的語言環境來構造一個Collator對象:

然后用如下語句創建Comparator:

 

[java]  view plain  copy
 
  1. Comparator<Object> com=Collator.getInstance(java.util.Locale.CHINA);  


要注意的是Comparator里面的泛型類型一定要是Object類型,因為Collator類實現的Comparator接口里面傳入的對象是Object:

 

 

完整的實現代碼如下:

 

[java]  view plain  copy
 
  1. import java.text.Collator;    
  2. import java.util.*;    
  3. import java.util.Comparator;    
  4. public class cpm {    
  5.     public static void main(String[] args) {    
  6.         // TODO Auto-generated method stub    
  7.         Comparator<Object> com=Collator.getInstance(java.util.Locale.CHINA);    
  8.         String[] newArray={"中山","汕頭","廣州","安慶","陽江","南京","武漢","北京","安陽","北方"};    
  9.         List<String> list = Arrays.asList(newArray);  
  10.         Collections.sort(list, com);   
  11.         for(String i:list){    
  12.             System.out.print(i+"  ");    
  13.         }  
  14.     }    
  15. }  


輸出結果是:

安慶  安陽  北方  北京  廣州  南京  汕頭  武漢  陽江  中山  

 

 

實例2:

     List<Map<String,Object>> list = new ArrayList<>();
        List<GroupItemUser> groupItemUserLists = groupItemUserRepository.findAllByAgencyId(agencyId);
        Iterator<GroupItemUser> iterator = groupItemUserLists.iterator();
        for (; iterator.hasNext();) {
            GroupItemUser groupItemUser = (GroupItemUser) iterator.next();
            Long userId = groupItemUser.userId();
            SysUser sysUser = sysUserRepository.findOne(userId);
            String name = sysUser.name();
            Map<String, Object> map = new HashMap<>();
            map.put("id", userId);
            map.put("name", name);
            list.add(map);
        }
        
        //將List集合按照Map的name進行排序(a>b>c ...)
        if(CollectionUtils.isNotEmpty(list)){
            Collections.sort(list,new Comparator<Map<String,Object>>() {
                    @Override
                    public int compare(Map<String,Object> o1, Map<String,Object> o2) {
                        Collator instance = Collator.getInstance(Locale.CHINA);
                        return instance.compare(o1.get("name").toString(), o2.get("name").toString());
                    }
            }); 
        }
        
        return list;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM