IntelliJ IDEA 调试 Java 8,实在太香了

createh51个月前 (02-08)技术教程16

前段时间,栈长发布了一篇关于 Java 8 Optional.map 的实用文章,留言区就有的人说 Java 8 的语法糖不方便调试,还要视情况使用。

留言区也有人说 IntelliJ IDEA 早已支持 Java 8 Stream 调试,因为我平时也很少调试,那么我就以 IntelliJ IDEA 来演示下如何调试 Java 8 中的 Stream 链式调用吧。

先写一段 Java 8 Stream 示例:

/*
* 来源:Java技术栈 
*/
public static void main(String[] args) {
    Stream.of(100, 200, 300, 400, 500)
            .mapToLong(e -> e * 10)
            .filter(e -> e > 2000)
            .forEach(System.out::println);
}

这里只演示了一种 Stream 创建方式,Java 8 创建 Stream 的 10 种方式请点击这里进行阅读。

这个程序是先构建一个 5 个数字的 Stream, 然后再对每个数字 * 10,再筛选出大于 2000 的数字进行打印。

如何调试每个链式调用的过程呢?

先在第一行打个断点,然后进入调试模式运行,当断点进入时,点击调试窗口的 Trace Current Stream Chain 按钮:

然后自动进入当前 Stream 跟踪调试窗口,上面会展示每个链式调用的选项卡,点击各个选项卡可以看对应每步的跟踪结果。

如下面所示:

也可以点击左下角的 Flat Mode 进入扁平模式,一次性展示所有跟踪结果:

OK,Java 8 Stream 的调试不是问题了, 但我并没有找到像 Optional 链式调用的调试方式。

比如下面一段 Optional 示例:

/*
* 来源:Java技术栈 
*/
public static void main(String[] args) {
    String string = Optional.of("hi,")
            .map(e -> e + "Java")
            .map(e -> e + "技术")
            .map(e -> e + "栈").get();
    System.out.println(string);
}

调试如图所示:

可惜,Trace Current Stream Chain 按钮是灰色状态,不能进入,因为那个按钮只能被 Stream 调试所用。

那像这种非 Stream 链式调用怎么调试呢?

断点进入后,可以选中需要调试的部分链式代码片断,然后右键选中 Evaluate Expression 菜单(ALT + F8)进入表达式计算窗口:

点击 Evaluate 按钮开始计算:

计算无误,该表达式还可以自由编辑,非常强大。

虽然没有像 Stream 这样专属的调试面板,使用 Evaluate Expression 也能达到调试链式调用的目的吧。关于这个,你还有其他调试方案么?欢迎留言分享!

好了,本次的分享就到这里了,希望对大家有用。觉得不错,在看、转发分享一下哦~

关注Java技术栈,栈长将继续分享好玩的 Java 技术,你也可以点击下面的了解更多链接关注Java技术栈阅读历史 IDEA 教程,都是干货。

相关文章

Java基础入门篇(四)Java SE、Java EE、Java ME三者之间的区别

编者荐语:Java 是排名第一的编程语言和开发平台。它可以降低成本、缩短开发时间、推动创新并改进应用服务。随着全球数百万开发人员运行超过 510 亿台 Java 虚拟机,Java 继续成为企业和开发人...

带你好好掌握:最全最详细的Java IO流

本文主要介绍 Java中的I/O系统如有需要,可以参考如有帮助,不忘 点赞 ?前言:对程序语言的设计者来说,创建一个好的输入/输出 (I/O) 系统是一项艰难的任务Java IO:即 Java 输入/...

Java程序员要不要学习Lua?_javagui有必要学吗

大家好,我是袁庭新。Java程序员要不要学习Lua?Lua虽小,但威力巨大!游戏开发、嵌入式系统、自动化脚本...哪哪都离不开它!|Lua介绍Lua官网:https://www.lua.org。Lua...

Java开发必读,谈谈对Spring IOC与AOP的理解

本文分享自华为云社区《超详细的Java后台开发面试题之Spring IOC与AOP-云社区-华为云》,作者:GaussDB 数据库。一、前言IOC和AOP是Spring中的两个核心的概念,下面谈谈对这...

如何在 Linux 上安装 Java_怎么在linux安装jdk

在桌面上拥抱 Java 应用程序,然后在所有桌面上运行它们。-- Seth Kenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Java EE更名Jakarta EE 无法提供向前兼容性

[闽南网]去年三月份,Java EE正式更名为Jakarta EE,而Eclipse基金会执行董事Mike Milinkovich在其博客上公布了Eclipse基金会与Oracle有关Java的谈判结...