user2578909:
私は最高の平均気温の国の名前を取得する必要があります。
私は平均気温を取得するために、以下の使用しています
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>
。私は1つを書いたが、コードは大きくありませんでした。ベターそれをシンプルに保つために。