【问题标题】:Calculate average for nested List计算嵌套列表的平均值
【发布时间】:2019-12-23 06:06:51
【问题描述】:

请告诉我一种计算该结构平均值的有效方法。

例子:

List<Double> one = Arrays.asList(-17.3, -1.3, 22.3);
List<Double> two = Arrays.asList(-2.3, 12.2, -75.3);
List<Double> three = Arrays.asList(-0.3, 72.0, -22.1);

List<List<Double>> montSensorMetrics = new ArrayList<>();
montSensorMetrics.add(one);
montSensorMetrics.add(two);
montSensorMetrics.add(three);

期待:

R = ((-17.3) + (-2.3) + (-0.3)) / 3

List<Double> result = new ArrayList<>();
result.add(R)

现在,我创建了一个计算平均值的方法:

public List<Double> calculateAverageForMetric(List<List<Double>> montSensorMetrics) {
    List<Double> sumAccumulator = new ArrayList<> ();

    for (int j = 0; j < montSensorMetrics.size(); j++) {
        //add first set as is
        if (j == 0) {
            sumAccumulator.addAll(montSensorMetrics.get(j));
            j++;
        }

        var metricData = montSensorMetrics.get(j);

        for (int i = 0; i < metricData.size(); i++) {
            double elementValueInAccumulator = sumAccumulator.get(i);
            double currentValueInMetric = metricData.get(i);
            double sum = elementValueInAccumulator + currentValueInMetric;
            sumAccumulator.set(i, sum);
        }
    }

    return sumAccumulator.stream().map(v - > v / montSensorMetrics.size()).collect(Collectors.toList());
}

你能告诉我,这是正确的决定吗?

【问题讨论】:

  • 问:你不会认为List.add() 是把list 的元素算术相加吧?您知道“.add()”只是将一个列表附加到另一个列表,对吗?问:那你的问题到底是什么?
  • Java 代码仅供说明之用。而且对核心问题没有直接影响。我想展示结构是什么样的,需要采取措施来计算算术平均值。我究竟是如何表现得更低一些。我需要轮流添加嵌套列表的值并将结果放在另一张表中。
  • 你可以使用流(Java 8)

标签: java list average


【解决方案1】:

我使用 Java 8 流来获取每个列表的平均值。

List<Double> one = Arrays.asList(-17.3, -1.3, 22.3);
List<Double> two = Arrays.asList(-2.3, 12.2, -75.3);
List<Double> three = Arrays.asList(-0.3, 72.0, -22.1);

List<List<Double>> montSensorMetrics = new ArrayList<>();
montSensorMetrics.add(one);
montSensorMetrics.add(two);
montSensorMetrics.add(three);

List<Double> averageValues = IntStream.range(0,montSensorMetrics.size()).mapToDouble(pos -> montSensorMetrics.stream().mapToDouble(outer -> outer.get(pos)).sum()).map(a -> a/montSensorMetrics.size()).boxed().collect(Collectors.toList());
System.out.println(averageValues);

【讨论】:

  • 每个?仔细查看帖子中的示例,此处考虑了该列的平均值。
猜你喜欢
  • 2021-12-24
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多