stream.foreach求和
时间: 2025-05-23 18:07:39 浏览: 20
### 如何使用 `Stream` 和 `forEach` 进行求和操作
尽管 `forEach` 方法主要用于遍历流中的元素并对其执行某些操作,但它本身并不适合用于返回结果的操作(如求和)。为了实现求和功能,通常会结合其他终端操作方法,比如 `reduce()` 或者直接使用 `sum()`。
下面是一个完整的例子展示如何利用 `IntStream` 来完成求和操作:
```java
import java.util.Arrays;
import java.util.List;
public class StreamSumExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用 mapToInt 将 Integer 转换为 int 类型以便于 sum 操作
int totalSum = numbers.stream()
.mapToInt(Integer::intValue)
.sum();
System.out.println("总和: " + totalSum); // 输出: 总和: 15
}
}
```
如果确实想通过 `forEach` 实现类似的求和逻辑,则可以通过外部变量累积结果。不过需要注意这种方式违背了函数式编程的原则——即保持状态不变性和无副作用[^5]。
```java
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
public class ForEachSumExample {
public static void main(String[] args) {
AtomicInteger atomicTotal = new AtomicInteger();
Arrays.stream(new int[]{1, 2, 3, 4, 5})
.forEach(num -> atomicTotal.addAndGet(num));
System.out.println("总和: " + atomicTotal.get()); // 输出: 总和: 15
}
}
```
上述代码片段展示了两种不同的方式来达到同样的目的:一种是推荐的标准做法;另一种则是演示如何强制使用 `forEach` 完成任务,但不建议这样做因为引入了可变的状态。
阅读全文
相关推荐



















