好運物流網(wǎng)-全國領(lǐng)先的物流網(wǎng)   好運物流網(wǎng)-登錄  好運物流網(wǎng)-免費注冊 進(jìn)入我的后臺 首頁(yè) | 發(fā)布信息 | 服務(wù)項目 | 物流百科
物流查詢(xún)|物流公司|中國物流信息網(wǎng)-好運物流網(wǎng)
 
你正在查看的信息:資訊首頁(yè)->資訊頻道->IT編程技術(shù)->正文

list.stream().collect Collectors.groupingBy分組后的排序問(wèn)題,實(shí)現輸出json分組排序

更新時(shí)間:2021/9/1 14:38    出處:互聯(lián)網(wǎng)
已經(jīng)瀏覽
5076
默認groupingBy代碼里會(huì )生成一個(gè)HashMap(hashMap是無(wú)序的,put的順序與get的順序不一致)

HashMap是無(wú)序的,HashMap在put的時(shí)候是根據key的hashcode進(jìn)行hash然后放入對應的地方。所以在按照一定順序put進(jìn)HashMap中,然后遍歷出HashMap的順序跟put的順序不同(除非在put的時(shí)候key已經(jīng)按照hashcode排序號了,這種幾率非常。
單純的HashMap是無(wú)法實(shí)現排序的,這的排序是指,我們將鍵值對按照一定的順序put進(jìn)HashMap里,然后在進(jìn)行取鍵值對的操作的時(shí)候,是按照put進(jìn)去的順序把鍵值對取出來(lái)的。
JAVA在JDK1.4以后提供了LinkedHashMap來(lái)幫助我們實(shí)現了有序的HashMap!LinkedHashMap取鍵值對時(shí),是按照你放入的順序來(lái)取的。


這就造成了一個(gè)List<Model>如果是有序的,在 groupingBy后 model的順序是不可控的.


現在遇到這樣一個(gè)場(chǎng)景

在CMS里,每個(gè)頁(yè)面的模塊是按順序排放的,每個(gè)模塊的內容也是按順序的如 

List<Model> list=Arrays.asList(m1,m2,m3)

現在需要對里面的元素分組,但是分組后的順序也必須是 m1,m2,m3...中間可以缺少,但是不能亂序

以下是合法的 m1,m3  或者  m2,m3 但是不能 m3,m2

如以下代碼 list的順序是  id=2的在 id=1之前, 分組之后的訪(fǎng)問(wèn)也必須是id=2的在前才對

但是如果調用 默認的分組,就會(huì )發(fā)現 id=1的在前了 (在后的將要在前;在前的將要在后了)


輸出總是

1

[A12,A11]

2

[A2,A21]

但是期望輸出為

2 [A21,A2]    1 [A12,A11]

如果需要保持排序就不能使用默認的 方法了,必須使用 被注釋的方法 (明確使用LinkedHashMap來(lái)保持順序).

下面是groupingBy的參數說(shuō)明

可以看到有三個(gè)參數,第一個(gè)參數就是key的Function了,第二個(gè)參數是一個(gè)map工廠(chǎng),也就是最終結果的容器,一般默認的是采用的HashMap::new,最后一個(gè)參數很重要是一個(gè)downstream,類(lèi)型是Collector,也是一個(gè)收集器,那就是說(shuō),這三個(gè)參數其實(shí)就是為了解決分組問(wèn)題的

第一個(gè)參數:分組按照什么分類(lèi)

第二個(gè)參數:分組最后用什么容器保存返回

第三個(gè)參數:按照第一個(gè)參數分類(lèi)后,對應的分類(lèi)的結果如何收集

 
其實(shí)一個(gè)參數的Collectors.groupingBy方法的 ,第二個(gè)參數默認是HashMap::new, 第三個(gè)參數收集器其實(shí)默認是Collectors.toList

案例:list.stream().collect(Collectors.groupingBy(類(lèi)::字段名, LinkedHashMap::new, Collectors.toList()));
還可以看看其他文章,謝謝您的閱讀。
網(wǎng)站申明:系本文編輯轉載,來(lái)源于網(wǎng)絡(luò ),目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責,所有權歸屬原作者。如內容、圖片有任何版權問(wèn)題,請聯(lián)系我們刪除。
上一篇:mysql取JSON數據查詢(xún)語(yǔ)句怎么寫(xiě)?mysql如何查詢(xún)JSON字段數據?mysql提取json語(yǔ)句方法 下一篇:java各種對象類(lèi)型的互相轉換,json、map、字符串、對象、array之間的轉換
更多相關(guān)的物流文章
IT編程技術(shù)  互聯(lián)網(wǎng)  2023-10-07  瀏覽:7872次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-24  瀏覽:10967次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-17  瀏覽:11606次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-17  瀏覽:10960次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-14  瀏覽:10948次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-06  瀏覽:11261次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-05  瀏覽:10800次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-05  瀏覽:10459次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-10-28  瀏覽:12241次
正在被瀏覽的文章
【IT編程技術(shù)】熱點(diǎn)文章
“掃一掃”微信公眾號
好運物流網(wǎng)公眾號二維碼
關(guān)于好運物流網(wǎng) - 聯(lián)系好運網(wǎng) - 物流公司查詢(xún) - 物流知道 - 幫助中心 - 網(wǎng)站地圖
溫馨提示:防范支招 安全警示:貨運合作要有安全意識,需當面核實(shí)對方真實(shí)身份,要簽訂合同/協(xié)議、提供身份證等(防范支招)
免責聲明:本站只起到物流信息平臺作用,內容的準確性以及物流過(guò)程中出現的任何風(fēng)險均由發(fā)布者負責,與平臺無(wú)關(guān)。
好運物流網(wǎng)(haoyun56.com)  備案號:浙ICP備10210792號-4

浙公網(wǎng)安備 33080202000006號

精品无人区乱码1区2区|国产中文字幕乱人伦在线观看|欧美日韩精品一区二区|尹人香蕉久久99天天拍|狠狠色伊人亚洲