Java flux Valeur maximale de la moyenne

user2578909:

Je dois obtenir le nom du pays de la température moyenne maximale.

Je l'ai utilisé suivant pour obtenir les températures moyennes

 this.getTemperatures()
                .stream()
                .collect(Collectors.groupingBy(Temperature::getCountry,
                        Collectors.averagingDouble(Temperature::getAverageTemperature)))

Comment puis-je obtenir le nom du pays moyen maximum ou minimum de cette liste moyenne des températures?

Michael :

Je ne aime pas beaucoup cela parce qu'une grande partie du code est répété, mais il fonctionnera. Je ne peux pas trouver un moyen d'éviter la répétition sans le code pire.

Ce itère également toutes les entrées de carte deux fois mais étant donné qu'il n'y a que 195 pays, nous parlons d'un maximum de 195 itérations supplémentaires (si vous avez des mesures pour tout le monde), et qui est une quantité tout à fait négligeable pour une 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"));

Si vous voulez seulement itérer une fois, vous pouvez écrire votre propre collecteur qui retourne quelque chose comme un MinMax<String>. J'ai écrit un , mais le code n'a pas été grand. Il vaut mieux garder les choses simples.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=186896&siteId=1
conseillé
Classement