首页 > 解决方案 > map 和 forEach 实例修改的区别

问题描述

当我运行下面的代码时, StringBuilder 实例保持为空。

String[] params = {"v1", "v2"};
StringBuilder sb = new StringBuilder();
Stream.of(params).map(param -> sb.append(param));

但是,当我使用 forEach 而不是 map 运行相同的代码时,它的行为符合预期(将数组元素附加到 StringBuilder 实例):

String[] params = {"v1", "v2"};
StringBuilder sb = new StringBuilder();
Stream.of(params).forEach(param -> sb.append(param));

为什么它在第一个示例中不更改 StringBuilder ?

标签: javalambdaforeachjava-8java-stream

解决方案


原因是该流尚未被调用。

String[] params = {"v1", "v2"};
StringBuilder sb = new StringBuilder();
Stream.of(params).map(param -> sb.append(param));

最后一条语句没有运行,因为没有激活流的后续方法。尝试这个:

Stream.of(params).map(param -> sb.append(param)).forEach(System.out::println);

现在sb应该有值了。


推荐阅读