java - 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 ?
解决方案
原因是该流尚未被调用。
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
应该有值了。
推荐阅读
- c++ - 在 std::erase() 产生未定义的行为之前调用 std::fill() 吗?
- java - 添加一个新的drawable它正在改变解析的xml的图标
- jenkins - 如何使用 Prometheus Operator 抓取 Jenkins 指标
- python - 如何使用参数从命令提示符执行 python?
- regex - 使用有序 dict 元组作为查找和替换模式
- c++ - C++17 中的向量初始化
- javascript - 防止在 d3v5 中平移到地图边界之外
- java - 通过 DynamicJasper 使用没有实体的 jdbc 连接生成报告
- typescript - VSCode 和打字稿
- python - Flask 路由传递参数返回错误