Java Stream Lambda调试疑问:为何调试器无法在sorted的Lambda处暂停?
调试Stream Lambda断点问题的分析与解决
1. 调试器无法在sorted的lambda内暂停的原因
- Java Stream的中间操作(包括
sorted)是惰性求值的:只有当执行终端操作(比如collect()、forEach()、count()这类)时,整个Stream的处理流程才会真正启动。 - 你的代码只构建了Stream的中间操作链,没有添加任何终端操作,导致
sorted对应的lambda根本没被执行,调试器当然不会在这个位置暂停。
2. 让调试器在该处暂停的方法
在Stream链的末尾加上一个终端操作,触发整个Stream的执行逻辑,这样sorted的lambda就会被调用,断点就能命中。修改后的代码示例:
taskQueues.stream() .filter(aDeque -> !aDeque.isEmpty()) .map(decks -> decks.stream()) .sorted((a, b) -> { return 1; // 现在断点可以正常触发 }) .collect(Collectors.toList()); // 添加终端操作触发执行
如果不需要保存处理结果,也可以用空的forEach作为终端操作:
taskQueues.stream() .filter(aDeque -> !aDeque.isEmpty()) .map(decks -> decks.stream()) .sorted((a, b) -> { return 1; }) .forEach(stream -> {}); // 用forEach触发执行
内容的提问来源于stack exchange,提问作者Kifsif
相关产品推荐
相关产品推荐

