使用Java8 Streams汇总列表中各点之间的距离

时间:2015-03-26 14:03:45

标签: java java-8 java-stream

我有一个点(x,y)列表,我想总结它们之间的距离。在 Java中我会这样做:

List<Point> points = ...
long sum = 0;
for (int i = 0; i < points.size() - 1; i++) {
    sum += PointUtil.distance(points.get(i), points.get(i + 1));
}
return sum;

现在问题是:我可以使用points.stream(). ...执行相同的代码吗?

2 个答案:

答案 0 :(得分:6)

这是我能想到的第一件事:

sum = IntStream.range(0,points.size()-1)
               .mapToLong(i -> PointUtil.distance(points.get(i), points.get(i + 1)))
               .sum();

答案 1 :(得分:6)

是。您可以使用IntStream进行索引编制:

long sum = IntStream.range(0, points.size() - 1)
                    .mapToLong(i -> PointUtil.distance(points.get(i), points.get(i + 1)))
                    .sum();