解決java.lang.IllegalStateException:Duplicate key異常問題
java.lang.IllegalStateException:Duplicate key異常
使用場景
在實(shí)際應(yīng)用開發(fā)中,會常把一個List的查詢數(shù)據(jù)集合轉(zhuǎn)為一個Map,那么在這里的 list.stream().collect()其實(shí)就是做了這么一件事情,它是java8的stream方式實(shí)現(xiàn)的它是以type為key,以entity對象為value構(gòu)成Map。
//查詢
List<QuestionCategoryEntity> list = questionCategoryService.selectList(entityWrapper);
Map<String, String> categoryMap = list.stream().collect(
Collectors.toMap(
QuestionCategoryEntity::getCategoryCode,
QuestionCategoryEntity::getCategoryName
)
);
在有些業(yè)務(wù)場景中會出現(xiàn)如下異常:Duplicate key ,map的key重復(fù),如上的 QuestionCategoryEntity::getCategoryCode。
java.lang.IllegalStateException: Duplicate key 專項(xiàng)考試
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1245)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
... ...
解決方法
使用toMap()的重載方法,如果已經(jīng)存在則不再修改,直接使用上一個數(shù)據(jù)。
//查詢
List<QuestionCategoryEntity> list = questionCategoryService.selectList(entityWrapper);
Map<String, String> categoryMap = list.stream().collect(
Collectors.toMap(
QuestionCategoryEntity::getCategoryCode,
QuestionCategoryEntity::getCategoryName,
(entity1, entity2) -> entity1
)
);
等效于
questionCategoryService.selectList(entityWrapper);
Map<String, String> categoryMap = list.stream().collect(
Collectors.toMap(
QuestionCategoryEntity::getCategoryCode,
QuestionCategoryEntity::getCategoryName,
(entity1, entity2) {
return entity1
}
)
);(entity1, entity2) -> entity1 這里使用的箭頭函數(shù),也就是說當(dāng)出現(xiàn)了重復(fù)key的數(shù)據(jù)時,會回調(diào)這個方法,可以在這個方法里處理重復(fù)Key數(shù)據(jù)問題,小編這里粗暴點(diǎn),直接使用了上一個數(shù)據(jù)。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SMBMS超市訂單管理系統(tǒng)的網(wǎng)站源碼
這篇文章主要介紹了SMBMS超市訂單管理系統(tǒng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
Java中comparator接口和Comparable接口的比較解析
這篇文章主要介紹了Java中comparator接口和Comparable接口的比較解析,Java提供了一個用于比較的接口Comparator和Comparable接口,提供了一個比較的方法,所有實(shí)現(xiàn)該接口的類,都動態(tài)的實(shí)現(xiàn)了該比較方法,需要的朋友可以參考下2023-08-08
Java?-jar參數(shù)詳解之掌握J(rèn)ava可執(zhí)行JAR文件的運(yùn)行技巧
做項(xiàng)目的時候我們肯定接觸過很多jar包,下面這篇文章主要給大家介紹了關(guān)于Java?-jar參數(shù)詳解之掌握J(rèn)ava可執(zhí)行JAR文件的運(yùn)行技巧,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
mybatis resultmap 如何為對象賦值的調(diào)用順序
這篇文章主要介紹了mybatis resultmap 如何為對象賦值的調(diào)用順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Java使用分治算法實(shí)現(xiàn)排序數(shù)索引功能示例【二分搜索】
這篇文章主要介紹了Java使用分治算法實(shí)現(xiàn)排序數(shù)索引功能,結(jié)合具體實(shí)例形式分析了java分治算法進(jìn)行排序索引的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
動態(tài)上傳jar包熱部署的實(shí)戰(zhàn)詳解
開發(fā)系統(tǒng)過程中遇到的一個需求,系統(tǒng)給定一個接口,用戶可以自定義開發(fā)該接口的實(shí)現(xiàn),并將實(shí)現(xiàn)打成jar包,上傳到系統(tǒng)中。系統(tǒng)完成熱部署,并切換該接口的實(shí)現(xiàn)。本文詳細(xì)介紹了實(shí)現(xiàn)方法,需要的可以參考一下2022-10-10
java爬蟲jsoup解析HTML的工具學(xué)習(xí)
jsoup是一個解析HTML的第三方j(luò)ava庫,它提供了一套非常方便的API,可使用DOM,CSS以及類jQuery的操作方法來取出和操作數(shù)據(jù),本文就來開始jsoup的使用學(xué)習(xí)2022-07-07
Java IText異常NoClassDefFoundError: org/bouncycastle
在使用Java進(jìn)行PDF文檔操作時,iText是一個非常強(qiáng)大的庫,然而,在實(shí)際開發(fā)過程中,可能會遇到一些異常情況,其中之一就是??NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable??,本文將探討這個錯誤的原因及其解決方案,需要的朋友可以參考下2025-02-02

