I have a list
of object Car
which has two attributes
int carId, long carSN
1, 123
2, 456
3, 123
1, 789
And I have another set
of object CarCombined
which has two attributes int carId, Set<Long> carSNs
Is there a way in Java Language using Java Stream (preferably) I can convert that List<Car>
to Set<CarCombined>
such that it groups by the carId? the new Set<CarCombined>
I am looking for should have these values:
1, [123, 789]
2, [456]
3, [123]
CodePudding user response:
Try this
list.stream().collect(groupingBy(Car::getCarId, mapping(Car::getCarSn, toSet())))
.entrySet().stream().map(e-> new CarCombined(e.getKey(), e.getValue())).collect(toSet());
First you transform your list into Map<carId, Set<carSn>>
and then transform map into CarCombined
objects and collect them as Set