Java 一次处理两个相邻元素的集合(使用流)

Java 一次处理两个相邻元素的集合(使用流),java,list,java-stream,fold,Java,List,Java Stream,Fold,我有一个代表不同城市的对象列表。我想对这个列表做的是获得列表中相邻城市之间距离的总和。因此,如果我的列表是l={c1,c2,c3},结果将是 总计sum=距离(c1,c2)+距离(c2,c3) 我试图使用streamapi,但在这种特殊情况下,我找不到处理列表中元素的方法,在这种情况下,处理不是一次处理一个元素,而是在每个步骤涉及列表中两个相邻的元素 如果有人知道如何以这种方式应用流,我将非常感激,请帮我一把。试试这个: n = l.size(); Stream.iterate(0, i -&g

我有一个代表不同城市的对象列表。我想对这个列表做的是获得列表中相邻城市之间距离的总和。因此,如果我的列表是
l={c1,c2,c3}
,结果将是 总计
sum=距离(c1,c2)+距离(c2,c3)

我试图使用streamapi,但在这种特殊情况下,我找不到处理列表中元素的方法,在这种情况下,处理不是一次处理一个元素,而是在每个步骤涉及列表中两个相邻的元素

如果有人知道如何以这种方式应用流,我将非常感激,请帮我一把。

试试这个:

n = l.size();
Stream.iterate(0, i -> i + 1)
      .limit(n-1)
      .map( i -> distance(l.get(i), l.get(i+1))
      .reduce(0, (totalDistance, currDistance) -> totalDistance + currDistance, (distance1, distance2) -> distance1 + distance2);
您只需使用以下功能:

double distance = IntStream.range(0, cities.size() - 1)
        .mapToDouble(i -> distance(cities.get(i), cities.get(i + 1)))
        .sum();

这将创建一个地图,并映射相邻城市的计算距离。最后,所有距离的总和。

您是否为此编写了命令式代码?你被困在哪里了?我是Java新手,我一直在将流应用于列表,但一次只处理一个元素,现在我想使用它,但要处理两个(一次相邻的元素),我仍然找不到方法来实现它Double totalKm=new Double(0d);对于(inti=0;i