最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

方法一:使用TreeMap

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

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

代碼示例:

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

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

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

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

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

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

方法二:使用lambda表達(dá)式和Stream流簡(jiǎn)化操作

示例代碼:

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

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

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

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

需要根據(jù)key排序?yàn)椋?nbsp;“2-123”,“123-234”,“2134-1234”時(shí),就需要重新書寫自定義的排序方法 或者 考慮其他的方式實(shí)現(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”進(jìn)行排序

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

相關(guān)文章

最新評(píng)論

南宫市| 当涂县| 南漳县| 霍州市| 章丘市| 红安县| 城固县| 日喀则市| 磐石市| 宜君县| 阿合奇县| 武邑县| 应城市| 乐平市| 长葛市| 庐江县| 徐水县| 绥中县| 紫云| 河东区| 康乐县| 博乐市| 沅陵县| 布尔津县| 平武县| 仁化县| 郸城县| 兴和县| 马龙县| 法库县| 渝中区| 辰溪县| 通州区| 星子县| 绵竹市| 佛山市| 嘉黎县| 新昌县| 巩留县| 伊金霍洛旗| 乌苏市|