计算java中多个值的平均值

计算java中多个值的平均值,java,list,average,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 List<String> l

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

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
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]))
                                        )
                                     );
这是一个更大列表的快照,其中包含节点值及其到达时间。我需要在右栏中找到左栏中每个节点的平均到达时间


我不知道如何在Java中使用列表来实现这一点。

您可以先将CSV文件读取到
列表中。然后通过在三重空间上拆分来解析它。然后将其收集到
映射
,其中键是节点,值是平均值。您可以使用
收集器中的
averagingDouble

代码如下所示:

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
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]))
                                        )
                                     );

您将如何使用另一种语言(或使用笔和纸手动)执行此操作?这是来自文件的列表吗?@Seelenvirtuose循环遍历每行的数组列表。为每个节点添加时间值,并在每次遇到该节点时创建一个计数器,或创建新节点值的新计数器。最后,用每个节点的计数器除以所有时间的总和。@iambdot是的,这是来自CSV的列表您可以在解析CSV文件时计算平均时间,根本不需要涉及Java列表。除非你以后为了另一个目的需要操纵该列表。谢谢!!所以这就是你想要做的:1。正在将文件读入流2中。将每个流拆分为\t 3。收集单个节点的值以及时间(再次收集平均值)乐意帮助。这确实是代码所做的。它不是真正的尝试,它实际上是工作代码;我编写了一个单元测试,您的示例的输出也在答案中提供。请注意\t是制表符,问题中的示例不使用制表符,而是使用3个空格。再次感谢您的澄清。我不可能这么快就写出这个简明的代码。今天我确实学到了一些新东西。