For the sake of this example, let\'s assume I have a simple type Tuple
with two attributes:
interface Tuple {
T getFirst();
U ge
I found a solution; It involves Collections.mapping()
, which can wrap a collector and apply mapping function over stream to supply elements to the wrapped collector:
static Map> groupSecondByFirst(Collection> tuples) {
return tuples
.stream()
.collect(
Collectors.groupingBy(
Tuple::getFirst,
Collectors.mapping(
Tuple::getSecond,
Collectors.toSet())));
}