public class Test {
? ? public static void main(String[] args) {
? ? ? ? Map<String, Object> map = new HashMap<String, Object>();
? ? ? ? map.put("name", "ZK");
? ? ? ? map.put("age", 13);
? ? ? ? Map<String, Object> map2 = new HashMap<String, Object>();
? ? ? ? map2.put("name", "ZA");
? ? ? ? map2.put("age", 15);
? ? ? ? Map<String, Object> map3 = new HashMap<String, Object>();
? ? ? ? map3.put("name", "CX");
? ? ? ? map3.put("age", 20);
? ? ? ? Map<String, Object> map4 = new HashMap<String, Object>();
? ? ? ? map4.put("name", "CX");
? ? ? ? map4.put("age", 18);
? ? ? ? List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
? ? ? ? list.add(map);
? ? ? ? list.add(map2);
? ? ? ? list.add(map3);
? ? ? ? list.add(map4);
? ? ? ? // 排序代碼如下
? ? ? ? List<Map<String, Object>> collect = list.stream().sorted(Comparator.comparing(Test::comparingByName)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .thenComparing(Comparator.comparing(Test::comparingByAge).reversed()))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .collect(Collectors.toList());
? ? }
? ? private static String comparingByName(Map<String, Object> map){
? ? ? ? return (String) map.get("name");
? ? }
? ? private static Integer comparingByAge(Map<String, Object> map){
? ? ? ? return (Integer) map.get("age");
? ? }
}
用到的一些Java8的東西
主要首先是stream了,list.stream()這里是把map的List集合變成map的流
然后就是Test::comparingByName這種中間加::表示方法引用
其次就是關(guān)鍵的stream.sorted()方法,參數(shù)是傳一個(gè)比較器Comparator,這里由JDK自帶的Comparator.comparing工具方法可以幫你構(gòu)建一個(gè)按照xx屬性進(jìn)行比較的比較器,默認(rèn)是升序
然后是比較器Comparator支持thenComparing方法,表示按照一定的比較順序把各個(gè)比較連接起來比較
其次是比較器Comparator的reversed方法,可以讓比較器的原始順序逆序,這也正好滿足題主需要按照age逆序排列的要求
最后就是collect()方法,把流的數(shù)據(jù)按照一定的方式收集起來,參數(shù)是一個(gè)收集器collector,這里用的是JDK自帶的工具方法Collectors.toList把流的數(shù)據(jù)收集為集合