处理一次获取两个相邻元素的集合(使用流)
Processing a collection taking two adjacent elements at a time (use of stream)
我有一个代表不同城市的对象列表。我想对该列表做的是获取列表中相邻城市之间的距离总和。因此,如果我的列表是 l = {c1,c2,c3}
,结果将是
总计 sum = distance(c1,c2) + distance(c2,c3)
.
我试图利用流 API 但我找不到一种方法来处理列表中的元素,在这种特殊情况下,一次处理的不是一个元素,而是涉及每一步列表的两个相邻元素。
如果有人知道如何以这种方式应用流,帮助我,我将不胜感激。
试试这个:
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();
这将创建一个 IntStream
并映射计算出的邻近城市的距离。最后将所有距离相加。
我有一个代表不同城市的对象列表。我想对该列表做的是获取列表中相邻城市之间的距离总和。因此,如果我的列表是 l = {c1,c2,c3}
,结果将是
总计 sum = distance(c1,c2) + distance(c2,c3)
.
我试图利用流 API 但我找不到一种方法来处理列表中的元素,在这种特殊情况下,一次处理的不是一个元素,而是涉及每一步列表的两个相邻元素。
如果有人知道如何以这种方式应用流,帮助我,我将不胜感激。
试试这个:
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();
这将创建一个 IntStream
并映射计算出的邻近城市的距离。最后将所有距离相加。