Java流平均值的最大值

我必须得到最高平均温度的国家名称.

我用以下来获得平均温度

 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>的内容.我写了一个,但代码不是很好.最好保持简单.

上一篇:[leetcode] 643. Maximum Average Subarray I


下一篇:POJ2833 The Average 优先队列