java stream临近两个元素计算,不做归约
时间: 2024-03-24 10:37:56 浏览: 72
如果你不想对Stream中的元素进行归约,而是想对临近的两个元素进行其他类型的计算,可以使用iterate()方法或者reduce()方法的重载版本。以下是一个使用iterate()方法的示例代码:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = Stream.iterate(numbers.get(0), n -> n + 1)
.limit(numbers.size() - 1);
stream.forEach(n -> {
int index = numbers.indexOf(n);
int sum = n + numbers.get(index + 1);
System.out.println(sum);
});
```
在这个例子中,我们首先使用iterate()方法生成一个从列表中第一个元素开始的无限流。然后使用limit()方法将其截取为大小为列表元素个数减1的有限流,这样我们就得到了临近两个元素的流。接着,我们对该流使用forEach()方法进行遍历,对每一对相邻的元素进行计算并输出结果。
如果你想使用reduce()方法进行计算,可以使用一个初始值,将临近的两个元素进行计算,并将计算结果作为下一次计算的第一个参数。以下是一个使用reduce()方法的示例代码:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int result = IntStream.range(1, numbers.size())
.reduce(numbers.get(0), (a, b) -> a + numbers.get(b));
System.out.println(result);
```
在这个例子中,我们使用IntStream.range()方法生成一个从1到列表元素个数减1的整数流。然后使用reduce()方法对临近的两个元素进行计算,将它们的和作为下一次计算的第一个参数。由于我们使用了一个初始值,所以即使列表为空,计算也不会出错。最终结果为15,与之前的例子相同。
阅读全文