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

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

如何在使用收集器收集元素時(shí)合并列表/集合

如何在使用收集器收集元素時(shí)合并列表/集合

喵喵時(shí)光機(jī) 2022-01-12 16:54:23
我正在嘗試根據(jù)他們的名字獲取產(chǎn)品評論地圖,并且需要一個(gè)類似的地圖Map<String, Set<String>> productReviewMap;但是當(dāng)我嘗試獲取地圖時(shí),我得到了Map<String, Set<Set<String>>> productReviewMap基于以下代碼:Map<String, Set<Set<String>>> productReviewMap = products.stream().collect(                     Collectors.groupingBy(Product::getName, Collectors.mapping(Product::getReviews, Collectors.toSet())));我怎樣才能得到預(yù)期的地圖。我們在流中使用 flatMap 但如何在收集器中實(shí)現(xiàn)它?
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊

this is 沒有內(nèi)置收集器JDK8,因此您的選擇是有限的:


使用toMap:


Map<String, Set<String>> resultSet = 

        products.stream()

                .collect(toMap(Product::getName,

                        p -> new HashSet<>(p.getReviews()),

                        (l, r) -> {

                            l.addAll(r);

                            return l;

                        }));

或使用自定義收集器。看到這里,最后的代碼片段在這里


JDK9有flatMapping并且可以按如下方式使用:


要么這個(gè):


 Map<String, Set<String>> resultSet = 

        products.stream()

                .collect(groupingBy(Product::getName,

                        mapping(Product::getReviews,

                                flatMapping(Collection::stream,

                                        toSet()))));

或這個(gè):


Map<String, Set<String>> resultSet = 

       products.stream()

               .collect(groupingBy(Product::getName,

                        flatMapping(s -> s.getReviews().stream(),toSet())));


查看完整回答
反對 回復(fù) 2022-01-12
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

試試這個(gè) 。這會(huì)奏效。
假設(shè)您使用的是 java 8。

Map<String,Set<String>> reviewMap = products.stream().collect(Collectors.toMap(Product::getName,Product::getReviews));



查看完整回答
反對 回復(fù) 2022-01-12
?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

您的代碼中的“產(chǎn)品”是什么?


我做了一個(gè)簡單的例子,其中 products 只是一個(gè) arrayList,它可以像你想要的那樣工作。(我已經(jīng)實(shí)現(xiàn)了一個(gè)“產(chǎn)品”類,所以它只是 p -> p


List<String> products = new ArrayList<>();

Map<String, Set<String>> productReviewMap = new HashMap<>();

final Map<String, Set<String>> collect = products.stream()

  .collect(Collectors.groupingBy(p -> p, Collectors.mapping(p -> p, Collectors.toSet())));



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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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