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

时间:2019-03-28 14:13:28

标签: java list java-stream fold

我有一个代表不同城市的对象列表。我要对该列表进行的操作是获取列表中相邻城市之间的距离之和。因此,如果我的清单是l = {c1,c2,c3},结果将是 总计sum = distance(c1,c2) + distance(c2,c3)

我试图使用流API,但在这种情况下,处理一次不是一个元素,而是涉及到列表中的两个相邻元素,因此我无法找到一种方法来处理列表中的元素在每个步骤中。

如果有人对如何以这种方式应用流技术有所帮助,我将非常感激。

2 个答案:

答案 0 :(得分:1)

尝试一下:

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);

答案 1 :(得分:1)

您可以使用此功能:

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

这将创建一个IntStream并映射计算出的邻近城市的距离。最后将所有距离相加。