解決java.lang.IllegalStateException:Duplicate key異常問題
java.lang.IllegalStateException:Duplicate key異常
使用場景
在實(shí)際應(yīng)用開發(fā)中,會常把一個(gè)List的查詢數(shù)據(jù)集合轉(zhuǎn)為一個(gè)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)存在則不再修改,直接使用上一個(gè)數(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ù)時(shí),會回調(diào)這個(gè)方法,可以在這個(gè)方法里處理重復(fù)Key數(shù)據(jù)問題,小編這里粗暴點(diǎn),直接使用了上一個(gè)數(shù)據(jù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot中通過jwt令牌校驗(yàn)及前端token請求頭進(jìn)行登錄攔截實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于springboot中如何通過jwt令牌校驗(yàn)及前端token請求頭進(jìn)行登錄攔截的相關(guān)資料,需要的朋友可以參考下2024-08-08Spring中的@PostConstruct注解使用方法解析
這篇文章主要介紹了Spring中的@PostConstruct注解使用方法解析,@PostConstruct注解是用來處理在@Autowired注入屬性后init()方法之前,對一些零散的屬性進(jìn)行賦值的注解,需要的朋友可以參考下2023-11-11快速學(xué)會Dubbo的配置環(huán)境及相關(guān)配置
本文主要講解Dubbo的環(huán)境與配置,文中運(yùn)用大量代碼和圖片講解的非常詳細(xì),需要學(xué)習(xí)或用到相關(guān)知識的小伙伴可以參考這篇文章2021-09-09Mybatis-plus新版本分頁失效PaginationInterceptor過時(shí)的問題
這篇文章主要介紹了Mybatis-plus新版本分頁失效,PaginationInterceptor過時(shí)問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Spring?Boot項(xiàng)目抵御XSS攻擊實(shí)戰(zhàn)過程
XSS攻擊又稱跨站腳本攻擊,通常指利用網(wǎng)頁開發(fā)時(shí)留下的漏洞,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot項(xiàng)目抵御XSS攻擊的相關(guān)資料,需要的朋友可以參考下2022-11-11Java文件讀寫IO/NIO及性能比較詳細(xì)代碼及總結(jié)
這篇文章主要介紹了Java文件讀寫IO/NIO及性能比較詳細(xì)代碼及總結(jié),具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12