Используйте коллектор groupingBy
, чтобы собрать все дома в каждом городе вместе; затем используйте нисходящий maxBy
коллектор, чтобы сохранить только самый дорогой дом в каждом городе:
obList.stream()
.collect(
groupingBy(
x -> x.getCity(),
maxBy(comparing(x -> x.getPrice())))
Это возвращает Map<CityType, Optional<HouseType>>
(где CityType
и HouseType
- независимо от типов городов и дома, соответственно.
Если вы хотите Map<CityType, HouseType>
(то есть без Optional
, поскольку вы знаете, что значение всегда присутствует), оберните нижестоящий коллектор:
collectingAndThen(maxBy(...), Optional::get)