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 Measurement
classe:
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.map
où map
est 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);