前段时间,栈长发布了一篇关于 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 技术,公众号第一时间推送,在公众号后台回复:IDEA,可以获取历史 IDEA 教程,都是干货。

近期热文推荐:

1.Java 15 正式发布, 14 个新特性,刷新你的认知!!

2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!

3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。

4.吊打 Tomcat ,Undertow 性能很炸!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

最新文章

  1. #ifndef _LED_H #endif啥意思?
  2. Android(Linux)线路规程的使用
  3. CURL in windows
  4. ado.net五大对象
  5. BZOJ3218 UOJ#77 A+B Problem(最小割+主席树)
  6. iOS instancetype or id ?
  7. Core Data
  8. Xcode 中关于"#"的小知识
  9. linux 中\r
  10. Java 抓取网页内容
  11. [置顶] Android开发之MediaPlayerService服务详解(一)
  12. SpringSecurity 在MVC 中的简单使用(翻译的,稍加改动)
  13. XCode: Target Settings和Project Settings的区别
  14. 起启航-华夏互联与杰华网络合体结盟打造本土IT利舰
  15. 【Cocos2d-X开发学习笔记】第28期:游戏中音乐和音效的使用
  16. oracle数据库在mybatis中使用uuid
  17. 浅析Thread类run()和start()的区别
  18. [LeetCode] 139. Word Break_ Medium tag: Dynamic Programming
  19. 引入springboot的两种方式以及springboot容器的引入
  20. xdebug的配置

热门文章

  1. 这应该是最适合国内用户的K3s HA方案
  2. Winform TextBox 数据绑定空值校验问题
  3. Docker 搭建 Redis Cluster 集群环境
  4. CSS中的包含块
  5. deepin20 安装英伟达闭源驱动
  6. JS实现斐波那契数列的五种方式
  7. Java 多线程实现多窗口同时售票简单功能
  8. Linux:基础命令三
  9. html基础:jquery的ajax获取form表单数据
  10. 《Head First 设计模式》:组合模式