成人免费观看在线视频高清中文_亚洲黄在免一区二区不卡无码_亚洲大尺码专区在线观看_韩国精品福利一区二区看

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

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

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

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


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


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

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

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

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

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

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

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


輸出總是

1

[A12,A11]

2

[A2,A21]

但是期望輸出為

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

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

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

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

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

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

第三個(gè)參數(shù):按照第一個(gè)參數(shù)分類(lèi)后,對(duì)應(yīng)的分類(lèi)的結(jié)果如何收集

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

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

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