日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序

發布時間:2023/12/4 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在這篇文章中,您將學習如何使用Java對Map按照鍵或值進行排序。前幾日有位朋友面試遇到了這個問題,看似很簡單的問題,但是如果不仔細研究一下也是很容易讓人懵圈的面試題。所以我決定寫這樣一篇文章。在Java中,有多種方法可以對Map進行排序,但是我們將重點介紹Java 8 Stream,這是實現目標的一種非常優雅的方法。

一、什么是Java 8 Stream

使用Java 8 Streams,我們可以按鍵和按值對映射進行排序。下面是它的工作原理:

將Map或List等集合類對象轉換為Stream對象

使用Streams的sorted()方法對其進行排序

最終將其返回為LinkedHashMap(可以保留排序順序)

sorted()方法以Comparator作為參數,從而可以按任何類型的值對Map進行排序。如果對Comparator不熟悉,可以看本號前幾天的文章,有一篇文章專門介紹了使用Comparator對List進行排序。

二、學習一下HashMap的merge()函數

在學習Map排序之前,有必要講一下HashMap的merge()函數,該函數應用場景就是當Key重復的時候,如何處理Map的元素值。這個函數有三個參數:

參數一:向map里面put的鍵

參數二:向map里面put的值

參數三:如果鍵發生重復,如何處理值。可以是一個函數,也可以寫成lambda表達式。

看上面一段代碼,我們首先創建了一個HashMap,并往里面放入了一個鍵值為k:1的元素。當我們調用merge函數,往map里面放入k:2鍵值對的時候,k鍵發生重復,就執行后面的lambda表達式。表達式的含義是:返回舊值oldVal加上新值newVal(1+2),現在map里面只有一項元素那就是k:3。

其實lambda表達式很簡單:表示匿名函數,箭頭左側是參數,箭頭右側是函數體。函數的參數類型和返回值,由代碼上下文來確定。

三、按Map的鍵排序

下面一個例子使用Java 8 Stream按Map的鍵進行排序:

點擊可放大

看上文中第二段代碼:

首先使用entrySet().stream() 將Map類型轉換為Stream流類型。

然后使用sorted方法排序,排序的依據是Map.Entry.comparingByKey(),也就是按照Map的鍵排序

最后用collect方法將Stream流轉成LinkedHashMap。 其他參數都好說,重點看第三個參數,就是一個merge規則的lambda表達式,與merge方法的第三個參數的用法一致。由于本例中沒有重復的key,所以新值舊值隨便返回一個即可。

上面的程序將在控制臺上打印以下內容,鍵(國家/地區名稱)以自然字母順序排序:

China=86France=33Germany=49Pakistan=92United States=1

請注意使用LinkedHashMap來存儲排序的結果以保持順序。默認情況下,Collectors.toMap()返回HashMap。HashMap不能保證元素的順序。

如果希望按照鍵進行逆向排序,加入下圖中紅色部分代碼即可。

四、按Map的值排序

當然,您也可以使用Stream API按其值對Map進行排序:

這是顯示Map按值排序的輸出:

United States=1France=33Germany=49China=86Pakistan=92

五、使用TreeMap按鍵排序

大家可能都知道TreeMap內的元素是有順序的,所以利用TreeMap排序也是可取的一種方法。您需要做的就是創建一個TreeMap對象,并將數據從HashMapput到TreeMap中,非常簡單:

// 將 `HashMap` 轉為 `TreeMap`Map sorted = new TreeMap(codes);

這是輸出:

China=86France=33Germany=49Pakistan=92United States=1

如上所示,鍵(國家/地區名稱)以自然字母順序排序。

期待您的關注

通過搜-suo-查詢“字母哥博客”或zimug點靠m,更多精品合集知識等待你!

本號只做持續的知識輸出,希望您能關注、評論、轉發!您的支持是我不竭的創作動力!讓知識產生價值、讓程序員改變世界!

總結

以上是生活随笔為你收集整理的java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。