IntelliJ IDEA 老司机,还没用过 Stream Trace 功能?
前言
自从 Java 8 开始,作为程序员的我们都离不开 Stream 相关功能的使用,书写起来那叫一个流畅(这个 feel~~)。但总是有一些时候,我们对 stream 的操作所要的结果和预期不符,这就需要我们逐步调试,定位问题
常规调试
先来看下面这段代码:
public static void main(String[] args) {
Object[] res = Stream.of(1,2,3,4,5,6,7,8).filter( i -> i%2 == 0).filter( i -> i>3).toArray();
System.out.println(Arrays.toString(res));
}
我们可以在 Stream 操作处打上断点,逐步查看结果,就像这样:
![](https://filescdn.proginn.com/c457548cce90f95a8624e8db292c7df7/a8edb76ad8fa43d149268cbf8fe36a00.webp)
我们需要各种单步调试,不是很直观,我们迫切的需要个一览视图,让我们快速查看我们的 Stream 结果
可视化调试
同样先选择行断点,以 Debug
模式进入程序:
![](https://filescdn.proginn.com/f17f4041c175457f28e521285b7b372d/3c86e6980315aa17ae047432977bd19c.webp)
接下来会弹出 Stream Trace
,整个 Stream 操作尽显眼前
![](https://filescdn.proginn.com/0e3d93cd3ac579f3290353d562700c74/8dda99dcb59d6394b094e49370d98fc1.webp)
同样可以点击左下角的 Flat Mode
按钮,将整个视图扁平化
![](https://filescdn.proginn.com/a0728bfc63306accef9429c19b77ccfa/7d4c76ecb6bb3e846195ac9ae0a6e193.webp)
在实际业务中,我们通常对集合进行各种 Stream 操作,我们再来个复杂一些的例子:
List<Optional<Customer>> customers = Arrays.asList(
Optional.of(new Customer("日拱一兵", 18)),
Optional.of(new Customer("卑微的小开发", 22)),
Optional.empty(),
Optional.of(new Customer("OOT", 21)),
Optional.empty(),
Optional.of(new Customer("温柔一刀", 23)),
Optional.empty()
);
long numberOf65PlusCustomers = customers
.stream()
.flatMap(c -> c
.map(Stream::of)
.orElseGet(Stream::empty))
.filter(c -> c.getAge() > 18)
.count();
System.out.println(numberOf65PlusCustomers);
同样按照上面的操作得到可视化 Stream Trace 视图,直观了解整个 Stream 流程,查看对象属性等
![](https://filescdn.proginn.com/5fd1f55c284dff128b7184c3533f4851/720c16cc4a81e2610400d9c39cb15078.webp)
总结
这个简单的功能,看一遍就会,相信可以在日常的调试中对你有很大帮助,接下来会介绍更多的你不曾留意又很高级调试技巧。
你用过这个功能吗?
你还知道哪些高级技巧?
往 期 推 荐
1、灵魂一问:你的登录接口真的安全吗? 2、HashMap 中这些设计,绝了~ 3、在 IntelliJ IDEA 中这样使用 Git,贼方便了! 4、计算机时间到底是怎么来的?程序员必看的时间知识! 5、这些IDEA的优化设置赶紧安排起来,效率提升杠杠的! 6、21 款 yyds 的 IDEA插件 7、真香!用 IDEA 神器看源码,效率真高! 点分享
点收藏
点点赞
点在看
评论