第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Java 8 中使用特定標(biāo)準(zhǔn)對列表進(jìn)行分組

如何在 Java 8 中使用特定標(biāo)準(zhǔn)對列表進(jìn)行分組

拉風(fēng)的咖菲貓 2022-01-12 17:13:17
我有一個如下所示的數(shù)據(jù)結(jié)構(gòu)。我正在嘗試以這樣的方式對對象進(jìn)行分組,例如Map<String, List<String>>key 是 entryId 而 value 是它所屬的組列表。entryId 在組內(nèi)始終是唯一的。示例:entryId "1111" 屬于 group1,group2,group3。我正在使用舊的 java 7 方式來遍歷列表并進(jìn)行檢查。有沒有最好的方法使用 Java8 收集器/分組來實(shí)現(xiàn)這一點(diǎn)。List<Group> 其中每個 Group 對象將有一個 Entry 對象列表。    [     {        "id":"group1",      "entries":[           {              "entryId":"1111",            "name":"test1"         },         {              "entryId":"2222",            "name":"test2"         },         {              "entryId":"3333",            "name":"test3"         }      ]   },   {        "id":"group2",      "entries":[           {              "entryId":"4444",            "name":"test1"         },         {              "entryId":"1111",            "name":"test2"         },         {              "entryId":"2222",            "name":"test3"         }      ]   },   {        "id":"group3",      "entries":[           {              "entryId":"1111",            "name":"test1"         },         {              "entryId":"5555",            "name":"test2"         },         {              "entryId":"3333",            "name":"test3"         }      ]   }]所以預(yù)期的輸出是這樣的:    [     {        "1111":[           "group1",         "group2",         "group3"      ]   },   {        "2222":[           "group1",         "group2"      ]   },   {        "3333":[           "group1",         "group3"      ]   },   {        "4444":[           "group2"      ]   },   {        "5555":[           "group3"      ]   }]
查看完整描述

2 回答

?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗 獲得超6個贊

你可以這樣做:


Map<String, Set<String>> entryMaps = new LinkedHashMap<>();

groups.forEach(group -> 

    group.getEntries().forEach(entry -> 

            entryMaps.computeIfAbsent(

                    entry.getEntryId().toLowerCase(),

                    k -> new LinkedHashSet<>())

                .add(group.getId())));

這會迭代組,然后是每個組的條目Map.computeIfAbsent,LinkedHashSet如果鍵不存在,則使用新的空條目放置條目,返回此空集或匹配該鍵的集。然后,組 id 被添加到這個返回的集合中。


注意:我使用 aSet而不是Listfor 值,以避免可能的重復(fù)。而LinkedHashMap和LinkedhashSet保證插入順序。


查看完整回答
反對 回復(fù) 2022-01-12
?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗 獲得超6個贊

像這樣的東西應(yīng)該可以工作,它需要制作某種中間元組對象:


list.stream()

.flatMap(group ->

   group.getEntries.stream()

        .map(entry -> new GroupEntry(group.getId(), entry.getEntryId()))

)

.collect(

   Collectors.groupingBy(GroupEntry::getEntryId, Collectors.mapping(GroupEntry::getGroupId, Collectors.toList())));



查看完整回答
反對 回復(fù) 2022-01-12
  • 2 回答
  • 0 關(guān)注
  • 175 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號