如何对较长的Stream链进行Debug

java 复制代码
Map<String, Integer> map = new HashMap<>();
        map.put("zhangsan", 1);
        map.put("lisi", 2);
        map.put("wangwu", 3);
        map.put("zhaoliu", 4);
        map.put("tianqi", 5);
        map.put("sunba", 5);
        map.put("zhouba", 5);
        List<String> result = map.entrySet().stream()
                .filter(e -> e.getValue() >= 5) // 过滤value >= 25
                .collect(Collectors.toMap(
                        Map.Entry::getKey,      // key -> age
                        Map.Entry::getValue,    // value -> name
                        (existing, replacement) -> existing // 去重保留第一次出现
                ))
                .entrySet().stream()
                .sorted((e1, e2) -> e2.getKey().compareTo(e1.getKey())) // 按age降序
                .limit(3)
                .map(e -> e.getValue() + "(" + e.getKey() + ")")
                .collect(Collectors.toList());
        System.out.println("relust=========" + result);
    }

常规调试:

在这里加断点

无法看到流转过程,不便于排查

方式一:

在流的开头和结尾分别加断点,启动debug:

点击最右侧按钮

点进去就可以看到清晰的流转过程。

方式二:

使用.peek()输出日志

java 复制代码
//...
.sorted((e1, e2) -> e2.getKey().compareTo(e1.getKey())) // 按age降序
.peek(System.out::println)
.limit(3)
//...

来展示一些中间的流转过程

相关推荐
怒放吧德德11 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆12 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
火柴就是我13 小时前
让我们实现一个更好看的内部阴影按钮
android·flutter
心之语歌15 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊16 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang16 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang17 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解18 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
砖厂小工19 小时前
用 GLM + OpenClaw 打造你的 AI PR Review Agent — 让龙虾帮你审代码
android·github
张拭心20 小时前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能