204. Implementing distinctBy() for the Stream API
Let’s suppose that we have the following model and data:
public class Car {
private final String brand;
private final String fuel;
private final int horsepower;
...
}
List<Car> cars = List.of(
new Car("Chevrolet", "diesel", 350),
...
new Car("Lexus", "diesel", 300)
);
We know that the Stream API contains the distinct()
intermediate operation, which is capable of keeping only the distinct elements based on the equals()
method:
cars.stream()
.distinct()
.forEach(System.out::println);
While this code prints the distinct cars, we may want a distinctBy()
intermediate operation that is capable of keeping only the distinct elements based on a given property/key. For instance, we may need all the cars distinct by brand. For this, we can rely on the toMap()
collector and the identity function, as follows:
cars.stream()
.collect(Collectors.toMap...