欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的Map集合根據(jù)key值排序的實現(xiàn)

 更新時間:2024年03月14日 09:00:28   作者:Rcain_R  
本文主要介紹了Java中的Map集合如何根據(jù)key值排序,包含使用TreeMap和使用lambda表達式和Stream流兩種方法,具有一定的參考價值,感興趣的可以了解一下

Map集合的鍵(key)默認是按照它們的hashCode排序的,這在有時間不符合業(yè)務(wù)排序。如果你想要根據(jù)Map的key值進行排序,一般以下有幾種方法可以實現(xiàn)。

方法一:使用TreeMap

使用TreeMap類,它會自動根據(jù)key的自然順序或自定義比較器進行排序。

1、使用key(String)的自然排序:

代碼示例:

// 假設(shè)Map為HashMap
Map<String, Integer> unsortedMap = new HashMap<>();  
// 添加元素到unsortedMap  
unsortedMap = ... ;  

// 使用TreeMap進行排序
Map<String, Integer> sortedMap = new TreeMap<>(unsortedMap);

2、使用自定義規(guī)則排序,傳入Comparator自定義排序規(guī)則:

// 假設(shè)為HashMap<String, Object> map
// 未排序的HashMap
Map<String, Object> unSortMap = ...; 

// 使用TreeMap并提供一個Comparator用于排序key
Map<String, Object> sortedMap = new TreeMap<>(new Comparator<String>() {
    @Override
    public int compare(String k1, String k2) {
        // 對于字符串key升序排序
        return k1.compareTo(k2);
        // 若需要降序排序,則可以改為
        // return k2.compareTo(k1);
    }
});

// 將原始Map的內(nèi)容復(fù)制到TreeMap中,此時Map會根據(jù)key排序
sortedMap.putAll(unSortMap );

方法二:使用lambda表達式和Stream流簡化操作

示例代碼:

// 按照key 升序排序
Map<String, Object> sortedMap = unSortMap.entrySet().stream()
    .sorted(Map.Entry.comparingByKey())
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue,
        // 解決可能存在的鍵沖突問題,默認保留第一個值
        (oldValue, newValue) -> oldValue,
        // 提供一個新的TreeMap實例作為收集器,用于保持排序
        () -> new TreeMap<>() 
    ));



// 或者,如果要降序排序
Map<String, Object> sortedMapDescending = originalMap.entrySet().stream()
    .sorted(Map.Entry.<String, Object>comparingByKey().reversed())
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue,
        // 處理鍵沖突
        (oldValue, newValue) -> oldValue, 
        () -> new TreeMap<>()
    ));

注意:此處不論方法一、方法二,對于Map中key為String類型的數(shù)據(jù),都是底層都是按照字典順序進行排序的。

所以一旦有一些特殊要求的排序:

例如:key為:“123-234”,“2134-1234”,“2-123”,

需要根據(jù)key排序為: “2-123”,“123-234”,“2134-1234”時,就需要重新書寫自定義的排序方法 或者 考慮其他的方式實現(xiàn)指定key排序了。

討論一下: 上面key值的Map該如何排序:

// 例:“2-123”,“123-234”,“2134-1234”

Map<String, Object> unSortMap = new HashMap();
map.put("123-234","2");
map.put("2-123","1");
map.put("2134-1234","3");


// 使得unSortMap 按照key值為“2-123”,“123-234”,“2134-1234”進行排序

到此這篇關(guān)于Java中的Map集合根據(jù)key值排序的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java中Map根據(jù)key值排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情

    SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情

    這篇文章主要介紹了SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • SpringBoot詳細介紹SPI機制示例

    SpringBoot詳細介紹SPI機制示例

    這篇文章主要介紹了深入解析Spring Boot的SPI機制詳情,SPI是JDK內(nèi)置的一種服務(wù)提供發(fā)現(xiàn)機制,可以用來啟用框架擴展和替換組件,主要用于框架中開發(fā),更多相關(guān)介紹,感興趣的小伙伴可以參考一下下面文章內(nèi)容
    2022-08-08
  • java 將數(shù)據(jù)加載到內(nèi)存中的操作

    java 將數(shù)據(jù)加載到內(nèi)存中的操作

    這篇文章主要介紹了java 將數(shù)據(jù)加載到內(nèi)存中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java中的線程安全問題詳細解析

    Java中的線程安全問題詳細解析

    這篇文章主要介紹了Java中的線程安全問題詳細解析,線程安全是如果有多個線程在同時運行,而這些線程可能會同時運行這段代碼,程序每次運行結(jié)果和單線程運行的結(jié)果是一樣的,而且其他的變量的值也和預(yù)期的是一樣的,此時我們就稱之為是線程安全的,需要的朋友可以參考下
    2023-11-11
  • java實現(xiàn)抖音飛機大作戰(zhàn)

    java實現(xiàn)抖音飛機大作戰(zhàn)

    這篇文章主要為大家詳細介紹了java實現(xiàn)抖音飛機大作戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • java封裝及四種權(quán)限修飾符詳解

    java封裝及四種權(quán)限修飾符詳解

    這篇文章主要介紹了java封裝及四種權(quán)限修飾符詳解,對屬性進行封裝,使用戶不能直接輸入數(shù)據(jù),我們需要避免用戶再使用"對象.屬性"的方式對屬性進行賦值
    2022-08-08
  • 關(guān)于SpringCloud整合RabbitMQ的實例

    關(guān)于SpringCloud整合RabbitMQ的實例

    這篇文章主要介紹了關(guān)于SpringCloud整合RabbitMQ的實例,消息隊列是指利用高效可靠的消息傳遞機制進行與平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成,是在消息的傳輸過程中保存消息的容器,需要的朋友可以參考下
    2023-07-07
  • 談?wù)凷pring AOP中@Aspect的高級用法示例

    談?wù)凷pring AOP中@Aspect的高級用法示例

    在Spring AOP中目前只有執(zhí)行方法這一個連接點,下面這篇文章主要給大家介紹了關(guān)于Spring AOP中@Aspect的高級用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Java基于PDFbox實現(xiàn)讀取處理PDF文件

    Java基于PDFbox實現(xiàn)讀取處理PDF文件

    PDFbox是一個開源的、基于Java的、支持PDF文檔生成的工具庫,它可以用于創(chuàng)建新的PDF文檔,修改現(xiàn)有的PDF文檔,還可以從PDF文檔中提取所需的內(nèi)容。本文將具體介紹一下PDFbox讀取處理PDF文件的示例代碼,感興趣的可以學(xué)習(xí)一下
    2022-02-02
  • Java FineReport報表工具導(dǎo)出EXCEL的四種方式

    Java FineReport報表工具導(dǎo)出EXCEL的四種方式

    這篇文章主要介紹了Java FineReport報表工具導(dǎo)出EXCEL的四種方式的相關(guān)資料,需要的朋友可以參考下
    2016-03-03

最新評論