Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java8流计算列表中点之间的距离总和_Java_Java 8_Java Stream - Fatal编程技术网

使用Java8流计算列表中点之间的距离总和

使用Java8流计算列表中点之间的距离总和,java,java-8,java-stream,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; 列出点=。。。 长和=0; 对于(int i=0;i

我有一个点(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;
列出点=。。。
长和=0;
对于(int i=0;i

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

我想到的第一件事是:

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

对。您可以使用
IntStream
,以便建立索引:

long sum = IntStream.range(0, points.size() - 1)
                    .mapToLong(i -> PointUtil.distance(points.get(i), points.get(i + 1)))
                    .sum();
在“旧”Java中,您应该使用
迭代器
并引用前面的元素,因为
get
可能会有不好的性能,这取决于底层实现。