List<Map>排序

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ù)收集為集合

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • public static void main(String[] args) { List taskList =n...
    sanqi37閱讀 2,642評(píng)論 0 0
  • 簡(jiǎn)介 在本教程中,我們將首先了解Java 8中的Lambda支持,特別是如何利用它來編寫Comparator并對(duì)C...
    油膩的Java閱讀 564評(píng)論 0 0
  • lambda表達(dá)式(又被成為“閉包”或“匿名方法”)方法引用和構(gòu)造方法引用擴(kuò)展的目標(biāo)類型和類型推導(dǎo)接口中的默認(rèn)方法...
    183207efd207閱讀 1,547評(píng)論 0 5
  • 學(xué)習(xí)集合之前復(fù)習(xí)相關(guān)知識(shí): Hash:翻譯為散列、哈希,所以散列和哈希指的是同一個(gè)概念。散列碼:一種標(biāo)識(shí)碼,由散列...
    教堂白鴿閱讀 294評(píng)論 0 1
  • 一、Collection集合 1.1集合體系結(jié)構(gòu)【記憶】 集合類的特點(diǎn)? 提供一種存儲(chǔ)空間可變的存儲(chǔ)模型,存儲(chǔ)的數(shù)...
    super_hongtao閱讀 343評(píng)論 0 0

友情鏈接更多精彩內(nèi)容