Не выводит название города работая с Map Java

Исходные данные:

 Map<String, Integer> cityCount = new HashMap<>();
        cityCount.put("Omsk", 1300);
        cityCount.put("Kiev", 5700);
        cityCount.put("Marino", 2200);
        cityCount.put("Moscow", 12400);
        cityCount.put("Mexico", 20500);

key- города, value- численность людей в этих городах.

По тексту задачи нужно вывести город с самой большой численностью людей. В моем случае это Mexico со значением 20500. В моем коде отображаются цифры, но при выводе названия города выходит Null

Вот что написал:

Set<String> keys = cityCount.keySet();
int maxCity = 0;
for (String key : keys) {
    if (cityCount.get(key) >= maxCity) {
        maxCity = cityCount.get(key);
    }
}
System.out.println("Большое количество население в городе: " + cityCount.get(keys));

И вот такой результат выдает мне:

Большое количество население в городе: null

Как можно вывести теперь сам город* Mexico?


Ответы (3 шт):

Автор решения: Эникейщик

Оно и правильно. У вас нет ключа, который являет собой сет из названий городов. Т.к. keys у вас набор названий городов, то cityCount.get(keys) эквивалентно cityCount.get([Omsk, Mexico, Kiev, Marino, Moscow]). Понятно, что вернется null.

Сделайте еще одну переменную для города, и сохраняйте туда название, как только найден очередной максимум.

→ Ссылка
Автор решения: Vanyipz

Предлагаю сделать таким способом

String maxCity = "";
int max = Integer.MIN_VALUE;
for (Map.Entry<String, Integer> city : cityCount.entrySet()) {
    if(city.getValue() > max) {
               max = city.getValue();
               maxCity = city.getKey();
            }
}
    
System.out.println("Большое количество население в городе: " + maxCity);
→ Ссылка
Автор решения: Nowhere Man

Можно использовать Stream API, в частности метод Stream::max(Comparator<? super T> comparator), где в качестве компаратора для элементов мапы можно использовать компаратор по значению Map.Entry.comparingByValue():

Map<String, Integer> cityCount = new HashMap<>();
cityCount.put("Omsk", 1300);
cityCount.put("Kiev", 5700);
cityCount.put("Marino", 2200);
cityCount.put("Moscow", 12400);
cityCount.put("Mexico", 20500);

System.out.println(cityCount.entrySet()
    .stream()
    .max(Map.Entry.comparingByValue()) // Optional<Map.Entry<String, Integer>>
    .map(Map.Entry::getKey) // Optional<String>
    .orElse("N/A")
);
// -> Mexico
→ Ссылка