Hruday:
私は、リストの平均を必要とします
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);
どのように私は地図の上のリストの平均年齢を入手できます。また、ヌル値を無視して平均スコア。
すべてのヘルプは本当にいただければ幸いです。私は3日以来の修正に苦労しています。前もって感謝します。
ブック:
このようのためのMeasurement
クラス:
class Measurement {
Map<String, Double> map;
public void setMetric(Map<String, Double> map) {
this.map = map;
}
}
(ストリームを使用して)avarage「年齢」を見つける方法:
Double averageAge = measurements.stream()
.collect(Collectors.averagingDouble(node -> node.map.getOrDefault("age", 0D)));
そして、ヌル値を許可する「スコア」のためのストリーム:
ヌルチェックとavarage「年齢」(使用してストリーム)を見つける方法:
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()
)
(ループを使用して)avarage「年齢」を見つける方法:
Double average = 0D;
for (Measurement measure : measurements) {
average += measure.map.getOrDefault("age", 0D);
}
average /= measurements.size();
ヌルチェックとavarage「スコア」(使用してループ)を見つける方法:
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);