我必须得到最高平均温度的国家名称.
我用以下来获得平均温度
this.getTemperatures()
.stream()
.collect(Collectors.groupingBy(Temperature::getCountry,
Collectors.averagingDouble(Temperature::getAverageTemperature)))
如何从此平均温度列表中获取最大或最小平均国家/地区名称?
解决方法:
我不太喜欢这个,因为很多代码都会重复,但它会起作用.如果不使代码变得更糟,我无法找到避免重复的方法.
这也会迭代所有的地图条目两次,但鉴于只有195个国家/地区,我们谈论的是最多195次额外迭代(如果您对每一个都进行了测量),这对于CPU来说是完全可以忽略不计的数量.
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>的内容.我写了一个,但代码不是很好.最好保持简单.