java - java lambda中的中断语句
问题描述
我有这个代码
Integer[] i = {1,3,4,6,7,43,2,1};
//create a predicate
Predicate<Integer> ini = value -> value > 10;;
//display-filter-and print the values in the collection
List<Integer> sss =Stream.of(i).peek(e -> System.out.println(e)).filter(ini).
peek(value -> System.out.println("After filter " + value)).collect(Collectors.toList());
//display the filtered list
System.out.println(sss);
我得到了这个结果
1
3
4
6
7
43
After filter 43
2
1
[43]
我的问题是为什么我在 peek 语句中间收到过滤器消息?我在不同的 IDE 中尝试过这个,但我得到了相同的结果。
解决方案
你为什么惊讶?
您有两个peek()
方法调用。第一个在过滤器之前,第二个在过滤器之后。
您的流管道一次消耗一个元素(这是由于执行终端操作而发生的collect()
)。
使用流的元素涉及应用 first peek()
,它打印元素,然后应用过滤器。
只有当元素通过过滤器时,peek()
才会应用第二个元素,并打印“过滤后......”。
通过过滤器的唯一元素是 43,这导致
43
After filter 43
被消耗时被打印。
只有稍后剩余的元素才会被消耗,并在第一个元素peek
应用于它们时打印。
推荐阅读
- r - 负前瞻检查是否存在多个模式
- python - 单例的哪种用法最合适/pythonic?
- c# - 文件流读取数组到行 C#
- python - Python numpy 方法/属性比 numpy 函数快吗?
- python - 如何使用 Selenium 更新 INITIAL_REDUX_STATE?
- javascript - 从 img 标签中检索值
- javascript - 父范围没有触发 React 中的子重新渲染
- spring - 从数据库动态更新权限(spring security)
- python - 如何使用 DLL 依赖项打包 Python 项目
- linux - Logitech MX 键的 Azerty 键盘布局错误 Linux 中的 Azerty 版本