Мне это не очень нравится, потому что большая часть кода повторяется, но это будет работать. Я не могу найти способ избежать повторения без ухудшения кода.
Это также повторяет все записи на карте дважды, но, учитывая, что существует только 195 стран, мы говорим о максимально 195 дополнительных итерациях (если у вас есть измерения для каждой), и это совершенно незначительная величина для ЦПУ.
String max = countryToAvgTemp.entrySet().stream() //stream all entries
.max(Map.Entry.comparingByValue()) //get the max by comparing entry value
.map(Map.Entry::getKey) //grab the key
.orElseThrow(() -> new RuntimeException("No max")); //e.g. if the list is empty
String min = countryToAvgTemp.entrySet().stream()
.min(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElseThrow(() -> new RuntimeException("No min"));
Если вы хотите выполнить итерацию только один раз, вы можете написать свой собственный сборщик, который возвращает что-то вроде MinMax<String>
. Я написал один, но код не был отличным. Лучше быть проще.