для таких Measurement
класс:
class Measurement {
Map<String, Double> map;
public void setMetric(Map<String, Double> map) {
this.map = map;
}
}
Как найти среднее "возраст" (используя поток):
Double averageAge = measurements.stream()
.collect(Collectors.averagingDouble(node -> node.map.getOrDefault("age", 0D)));
И поток для обнуляемого "счет":
Как найти средний «возраст» (с использованием потока) с нулевой проверкой:
Double averageAge = measurements.stream()
.filter(node -> node.map.get("score") != null)
.collect(Collectors.averagingDouble(node -> node.map.getOrDefault("score", 0D)));
В приведенном выше коде у вас есть node.map
, где map
- это класс формы поля.Может быть заменен на getMap()
или другим методом, возвращающим значение (которое установлено setMetric()
)
Как найти среднее значение "age" (с помощью цикла):
Double average = 0D;
for (Measurement measure : measurements) {
average += measure.map.getOrDefault("age", 0D);
}
average /= measurements.size();
Какнайти средний «счет» (используя цикл) с нулевой проверкой:
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;
Как найти наименьший «счет» (используя цикл) с нулевой проверкой:
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);
какнайти самый большой «возраст» (используя потоки)
Double max = measurements.stream()
.filter(node -> node.map.get("score") != null)
.mapToDouble(node -> node.map.get("score"))
.max()
.orElse(0.0);