我有一个如下所示的列表:
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中处理此问题。
答案 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}