java stream临近两个元素计算
时间: 2024-01-16 16:02:13 浏览: 27
在Java Stream中,可以使用reduce()方法来对临近的两个元素进行计算。reduce()方法接收一个二元操作符,该操作符接收两个参数,将它们合并后返回一个结果,然后将该结果作为下一次操作的第一个参数,继续和下一个元素进行计算。以下是一个示例代码:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> result = numbers.stream()
.reduce((a, b) -> a + b);
```
在这个例子中,我们对整数列表中的元素求和。reduce()方法接收一个Lambda表达式,该表达式将两个整数相加并返回它们的和。在对Stream调用reduce()方法后,Java会将第一个元素1和第二个元素2传入该Lambda表达式,计算它们的和3,并将结果3作为下一次计算的第一个参数。然后Java会将结果3和下一个元素3传入Lambda表达式,计算它们的和6,并将结果6作为下一次计算的第一个参数。以此类推,直到所有元素都计算完毕,最终结果为15。
相关问题
java stream临近两个元素计算,不做归约
如果你不想对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,与之前的例子相同。
java stream临近两个元素计算,计算结果不计入下次计算,记录在list中
如果你想对临近的两个元素进行计算,并将计算结果记录在一个List中,而不是将其作为下一次计算的第一个参数,可以使用Stream的collect()方法,将结果收集到一个List中。以下是一个示例代码:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = IntStream.range(0, numbers.size() - 1)
.map(i -> numbers.get(i) + numbers.get(i + 1))
.boxed()
.collect(Collectors.toList());
System.out.println(result);
```
在这个例子中,我们使用IntStream.range()方法生成一个从0到列表元素个数减2的整数流,以便对临近的两个元素进行计算。然后使用map()方法将每一对相邻的元素进行计算,并将计算结果转换为Integer类型。接着使用boxed()方法将其转换为Stream<Integer>类型,以便使用collect()方法收集结果到一个List中。最终结果为[3, 5, 7, 9],表示相邻两个元素的和。