欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決java.lang.IllegalStateException:Duplicate key異常問題

 更新時(shí)間:2025年03月08日 10:25:56   作者:早起的年輕人  
java.lang.IllegalStateException:Duplicatekey異常在將List轉(zhuǎn)換為Map時(shí)出現(xiàn),解決方法是使用toMap()的重載方法,如果已經(jīng)存在則不再修改,直接使用上一個(gè)數(shù)據(jù)

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)文章

最新評論