Collection提供了排序方法sort(),但對於List<Map> 需要根據Map中某一個或某幾個Key進行排序,就需要重寫sort()方法來實現了;
實現方式如下:
public static void main(String[] args) { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Map<String, String> map1 = new HashMap<String, String>(); map1.put("id", "1"); map1.put("name", "zhangsan"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("id", "3"); map2.put("name", "zhangsan2"); Map<String, String> map3 = new HashMap<String, String>(); map3.put("id", "4"); map3.put("name", "wangwu2"); Map<String, String> map4 = new HashMap<String, String>(); map4.put("id", "2"); map4.put("name", "zhaoliu"); Map<String, String> map5 = new HashMap<String, String>(); map5.put("id", "4"); map5.put("name", "wangwu1"); list.add(map1); list.add(map3); list.add(map2); list.add(map4); list.add(map5); //排序前 System.out.println("---------------排序前------------------"); for (Map<String, String> map : list) { System.out.println(map); } //先根據ID在根據NAME進行排序 Collections.sort(list, new Comparator<Map<String, String>>() { public int compare(Map<String, String> o1, Map<String, String> o2) { String sort1=o1.get("id")+o1.get("name");//從list中拿出來第一個的id和name拼接到一起 String sort2=o2.get("id")+(String) o2.get("name");//從list中拿出來第二個的id和name拼接到一起 return sort1.compareTo(sort2);//利用String類的compareTo方法 } }); //排序后 System.out.println("---------------排序后------------------"); for (Map<String, String> map : list) { System.out.println(map); } }
結果如下:
---------------排序前------------------ {id=1, name=zhangsan} {id=4, name=wangwu2} {id=3, name=zhangsan2} {id=2, name=zhaoliu} {id=4, name=wangwu1} ---------------排序后------------------ {id=1, name=zhangsan} {id=2, name=zhaoliu} {id=3, name=zhangsan2} {id=4, name=wangwu1} {id=4, name=wangwu2}
上述代碼是先根據ID再根據NAME進行排序的,使用MAP中的一個key進行排序只需要獲取一個key進行排序即可:
Collections.sort(list, new Comparator<Map<String, String>>() { public int compare(Map<String, String> o1, Map<String, String> o2) { String sort1=o1.get("id");//從list中拿出來第一個的id和name拼接到一起 String sort2=o2.get("id");//從list中拿出來第二個的id和name拼接到一起 return sort1.compareTo(sort2);//利用String類的compareTo方法 } });
List泛型為javaBean同理;