IntelliJ IDEA 调试 Java 8 Stream,实在太香了!
Java技术栈
www.javastack.cn
关注阅读更多优质文章
前段时间,栈长发布了一篇关于 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 教程,都是干货。
- 系统性能优化一例
- Android中include标签的使用
- css3弹性盒子模型——回顾。
- confluence与jira账号对接、查看到期时间及问题总结
- 物联网、人工智能时代来临五大隐忧不可不提防
- Contact Manager Web API 示例[1]CRUD 操作
- 3个域名交易:fde.com11万被秒
- 新手指南OpenStack:Nova的基础知识
- Python-装饰器详解
- Contact Manager Web API 示例[2] Web API Routing
- Android一些关于分辨率和布局的设置
- log4net 中错误 System.Web.HttpException (0x80004005): 文件不存在
- Contact Manager Web API 示例[2] Web API Routing
- Python内置函数
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释