Вы должны взглянуть на Collectors.groupingBy
и Collectors.summingInt
.
Например, что-то вроде:
Map<String, Integer> cities=ownerMap.entrySet()
.stream()
.collect(Collectors.groupingBy(e -> e.getKey().getCity(), Collectors.summingInt(e -> e.getValue().size())));
cities.forEach((name, count) -> {
System.out.println(name + ":" + count);
});
Из документации Collectors.groupingBy
:
Возвращает Collector, реализующий каскадную операцию «group by» для элементов ввода типа T, группирует элементы в соответствии с функцией классификации, а затем выполняет операцию сокращения для значения, связанные с данным ключом с использованием указанного нисходящего коллектора.
В вашем случае функция классификации выполняется по городу (entry.getKey().getCity()
), а операция сокращения представляет собой сумму размера списка автомобилей по ключу ( entry.getValue().size()
).
РЕДАКТИРОВАНИЕ Изменено для получения суммы автомобилей (размер списка) по городам