web-dev-qa-db-fra.com

Java 8 moyenne du flux pour float

J'ai le modèle suivant:

public class WeightChange {

    private float value;

    public float getValue() {
        return value;
    }

    public void setValue(float value) {
        this.value = value;
    }

}

et collection:

private List<WeightChange> weightChanges;

J'ai implémenté une fonction qui obtient une valeur de poids moyenne en utilisant Java 8 fonctionnalités:

public float getAvgChangedWeight() {
    return (float) weightChanges.stream().mapToDouble(WeightChange::getValue).average().getAsDouble();      
}

Pourriez-vous s'il vous plaît aider à l'améliorer, car je ne pense pas que le casting au double soit une bonne idée.

Il lève également une exception lorsque la collection weightChanges est vide. Comment peut-on l'améliorer dans ce cas?

19
alexanoid

Pour répondre à la deuxième partie de votre question, si vous souhaitez éviter l'exception lorsque la liste est vide et renvoyer une valeur double, utilisez orElse au lieu de getAsDouble:

return weightChanges.stream()
    .mapToDouble(WeightChange::getValue)
    .average()
    .orElse(Double.NAN);
43
Misha