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

问题描述 投票:1回答:2

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

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

如果有人知道如何以这种方式应用流,我真的很感激,请帮助我。

java list java-stream fold
2个回答
1
投票

你可以使用这个:

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

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


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);
© www.soinside.com 2019 - 2024. All rights reserved.