如何对较长的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)
//...

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

相关推荐
二月夜1 小时前
剖析Java正则表达式回溯问题
java·正则表达式
xuhaoyu_cpp_java1 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
想吃火锅10051 小时前
【leetcode】405.数字转换为十六进制数js
开发语言·javascript·ecmascript
程序员二叉2 小时前
【Java】集合面试全套精讲|HashMap/ArrayList高频考点完整版
java·面试·哈希算法
专注VB编程开发20年2 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
cfm_29142 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
心之伊始2 小时前
LangChain4j RAG 实战:Java 后端如何把本地文档接入 Embedding 检索链路
java·架构·源码分析·csdn
~小先生~2 小时前
Python从入门到放弃(一)
开发语言·python
许彰午3 小时前
17_synchronized关键字深度解析
java·开发语言
z落落3 小时前
C# 泛型接口和泛型类+泛型约束
开发语言·c#