flux java Liste <Carte <String, Double >> besoin moyen en fonction de la chaîne

Hruday:

J'ai besoin de la moyenne de la liste

    List<Measurement> measurements = new ArrayList<>();

    Measurement m1 = new Measurement();
    Map<String,Double> map1 = new HashMap<>();
    map1.put("age",18.0);
    map1.put("score",88.0);
    map1.put("rating",5.0);
    m1.setMetric(map1);

    Measurement m2 = new Measurement();
    Map<String,Double> map2 = new HashMap<>();
    map2.put("age",21.0);
    map2.put("score",null);
    map2.put("rating",23.0);
    m2.setMetric(map2);

    Measurement m3 = new Measurement();
    Map<String,Double> map3 = new HashMap<>();
    map3.put("age",31.0);
    map3.put("score",32.0);
    map3.put("rating",null );
    m3.setMetric(map3);

    measurements.add(m1);
    measurements.add(m2);
    measurements.add(m3);

Comment puis-je obtenir l'âge moyen de la liste ci-dessus des cartes. Score moyen également en ignorant les valeurs nulles.

Toute aide sera grandement appréciée. Je suis mal à fixer depuis 3 jours. Merci d'avance.

Le livre:

pour cette Measurementclasse:

class Measurement {

    Map<String, Double> map;

    public void setMetric(Map<String, Double> map) {
        this.map = map;
    }
}

Comment trouver avarage « âge » (flux en utilisant):

Double averageAge = measurements.stream()
        .collect(Collectors.averagingDouble(node -> node.map.getOrDefault("age", 0D)));

Et pour diffuser annulable « score »:

Comment trouver avarage « âge » (flux en utilisant) avec contrôle null:

Double averageAge = measurements.stream()
        .filter(node -> node.map.get("score") != null)
        .collect(Collectors.averagingDouble(node -> node.map.getOrDefault("score", 0D)));

Dans le code ci - dessus vous node.mapmapest classe sous forme de champ. Peut être remplacé par la getMap()valeur de retour de la méthode ou différente (que vous définissez par setMetric())

Comment trouver avarage « âge » (boucle en utilisant):

Double average = 0D;
for (Measurement measure : measurements) {
    average += measure.map.getOrDefault("age", 0D);
}
average /= measurements.size();

Comment trouver avarage « score » (boucle à l'aide) avec contrôle null:

Double average = 0D;
int counter = 0;
for (Measurement measure : measurements) {
    if (measure.map.get("score") != null) {
        average += measure.map.getOrDefault("score", 0D);
        counter++;
    }
}
average /= counter;

Comment trouver le plus petit « score » (boucle à l'aide) avec contrôle null:

Double min = Double.MAX_VALUE;

for (Measurement measure : measurements) {
    Double score = measure.map.get("score");
    if (score != null && score < min) {
        min = score;
    }
}

System.out.println(min);

Comment trouver le plus grand « âge » (en utilisant des flux)

Double max = measurements.stream()
        .filter(node -> node.map.get("score") != null)
        .mapToDouble(node -> node.map.get("score"))
        .max()
        .orElse(0.0);

Je suppose que tu aimes

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