Нет встроенного коллектора для этого 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())));