亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

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

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

喵喵時光機 2022-01-12 16:54:23
我正在嘗試根據他們的名字獲取產品評論地圖,并且需要一個類似的地圖Map<String, Set<String>> productReviewMap;但是當我嘗試獲取地圖時,我得到了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())));我怎樣才能得到預期的地圖。我們在流中使用 flatMap 但如何在收集器中實現它?
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

this is 沒有內置收集器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并且可以按如下方式使用:


要么這個:


 Map<String, Set<String>> resultSet = 

        products.stream()

                .collect(groupingBy(Product::getName,

                        mapping(Product::getReviews,

                                flatMapping(Collection::stream,

                                        toSet()))));

或這個:


Map<String, Set<String>> resultSet = 

       products.stream()

               .collect(groupingBy(Product::getName,

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


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

TA貢獻1842條經驗 獲得超13個贊

試試這個 。這會奏效。
假設您使用的是 java 8。

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



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

TA貢獻1775條經驗 獲得超8個贊

您的代碼中的“產品”是什么?


我做了一個簡單的例子,其中 products 只是一個 arrayList,它可以像你想要的那樣工作。(我已經實現了一個“產品”類,所以它只是 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())));



查看完整回答
反對 回復 2022-01-12
  • 3 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號