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())));

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));

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())));
添加回答
舉報(bào)