计算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个空格。再次感谢您的澄清。我不可能这么快就写出这个简明的代码。今天我确实学到了一些新东西。