计算java中多个值的平均值

时间:2016-11-18 18:02:31

标签: java list average

我有一个如下所示的列表:

40   4.8980713
5   4.8012613
5   4.8980713
46   4.8980713
5   4.8980713
5   4.8945613
40   4.0120713
5   4.8980713
5   4.8828129
5   4.8000713
40   4.8947213
5   4.8980713
46   4.8980713
5   4.8828125
46   4.8980713

这是一个更大的列表的快照,其中包含节点值及其到达时间。我需要在左栏中的每个节点的右栏中找到到达时间的平均值。

我不确定如何使用列表在Java中处理此问题。

1 个答案:

答案 0 :(得分:2)

您可以先将CSV文件读取为List<String>。然后通过在三元空间上拆分它来解析它。然后将其收集到Map<Integer, Double>,其中键是您的节点,值是平均值。您可以使用averagingDouble中的Collectors

代码看起来像这样:

List<String> lines = Files.readAllLines(Paths.get("/path/to/arrivals.csv"));

Map<Integer, Double> averages = lines.stream()
                                     .map(s -> s.split("   "))
                                     .collect(
                                        Collectors.groupingBy(
                                           r -> Integer.parseInt(r[0]),
                                           Collectors.averagingDouble(v -> Double.parseDouble(v[1]))
                                        )
                                     );

如果你为你的例子运行这个,你得到:

{5=4.872644944444445, 40=4.6016213, 46=4.8980713}