IntelliJ IDEA 老司机居然还没用过 Stream Trace功能(问题小结)
程序员文章站
2022-06-16 09:16:15
前言自从 java 8 开始,作为程序员的我们都离不开 stream 相关功能的使用,书写起来那叫一个流畅(这个 feel~~)。但总是有一些时候,我们对 stream 的操作所要的结果和预期不符,这...
前言
自从 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 操作处打上断点,逐步查看结果,就像这样:
我们需要各种单步调试,不是很直观,我们迫切的需要个一览视图,让我们快速查看我们的 stream 结果
可视化调试
同样先选择行断点,以 debug
模式进入程序:
接下来会弹出 stream trace
,整个 stream 操作尽显眼前
同样可以点击左下角的 flat mode
按钮,将整个视图扁平化
在实际业务中,我们通常对集合进行各种 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 流程,查看对象属性等
总结
这个简单的功能,看一遍就会,相信可以在日常的调试中对你有很大帮助,接下来会介绍更多的你不曾留意又很高级调试技巧
以上就是intellij idea 老司机还没用过 stream trace功能(问题小结)的详细内容,更多关于idea stream trace的资料请关注其它相关文章!