Вы можете сделать это, используя коллектор groupingBy
вместе с mapping
в качестве нисходящего коллектора:
myList.stream()
.collect(groupingBy(e -> e.getKey(), mapping(e -> e.getValue(), toList())));
требуется импорт:
import static java.util.stream.Collectors.*;
Вы можетефактически достичь того же результата с помощью коллектора toMap
:
myList.stream()
.collect(toMap(e -> e.getKey(),
v -> new ArrayList<>(Collections.singletonList(v.getValue())),
(left, right) -> {left.addAll(right); return left;}));
, но это не идеально, когда вы можете использовать коллектор groupingBy
и он менее читабелен для IMO.