Найти наименьшее и наибольшее значение на карте

В этом руководстве по Java будут обсуждаться различные методы поиска наименьшего и наибольшего значения в HashMap. Мы обсудим методы простых итераций, коллекций и потоковых API. Мы будем использовать следующую карту для примеров.

Map<String, Integer> map = Map.of("key1", 100, "key2", 200, "key3", 300);

1. Использование потоков Java

Потоки Java предоставляют множество полезных классов и фабричных методов для выполнения различных операций редукции. Здесь мы использовали Stream.max(), который возвращает максимальный элемент потока на основе Comparator, который сравнивает Map.Entry в естественном порядке по значению. Аналогично мы можем использовать Stream.min(), который возвращает минимальное значение в карте.

Optional<Entry<String, Integer>> maxEntry = map.entrySet().stream().max(Map.Entry.comparingByValue());Integer maxValue = maxEntry.get().getValue();Optional<Entry<String, Integer>> minEntry = map.entrySet().stream().min(Map.Entry.comparingByValue());Integer minValue = minEntry.get().getValue(); 

2. Использование коллекций

Это один из простых и легких способов найти наименьшее и наибольшее значение из Map. Класс Collections предоставляет методы max() и min(), которые используют указанный Comparator для поиска наименьшего или наибольшего элемента из Map.

В данном примере все элементы коллекции взаимно сопоставимы и, таким образом, возвращают максимальный/минимальный элемент.

Entry<String, Integer> maxEntry = Collections.max(map.entrySet(), Comparator.comparing(Entry::getValue));Integer maxValue = maxEntry.getValue();Entry<String, Integer> minEntry = Collections.min(map.entrySet(), Comparator.comparing(Entry::getValue));Integer minValue = minEntry.getValue(); 

3. Использование итерации

В этом подходе нам нужно перебрать элементы предоставленной карты, чтобы выбрать самый низкий/самый высокий элемент и сохранить их в переменной. Обратите внимание, что этот подход неэффективен, когда количество вхождений элемента велико.

Entry<String, Integer> maxEntry = null;Entry<String, Integer> minEntry = null;for(Map.Entry<String, Integer> currentEntry : map.entrySet()) {if(maxEntry == null || currentEntry.getValue() > maxEntry.getValue()) {maxEntry = currentEntry;} else {minEntry = currentEntry;}}Integer maxValue = maxEntry.getValue();Integer minValue = minEntry.getValue(); 

4. Заключение

В этом коротком руководстве по Java мы изучили различные способы поиска минимального и максимального значения в карте с использованием различных методов от итерации до Stream API. Эффективный способ поиска наименьшего и наибольшего значения — это использование Stream API или использование коллекций вместо итерации элементов по одному.

Исходный код на Github

Прокрутить вверх