IntelliJ IDEA 老司机居然还没用过 Stream Trace功能(问题小结)

 更新时间:2021年05月18日 16:21:15   作者:日拱一兵  
很多朋友酷爱Java8 Stream功能,但是在使用过程中总不是那么顺利,下面通过本文给大家分享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 操作处打上断点,逐步查看结果,就像这样:

我们需要各种单步调试,不是很直观,我们迫切的需要个一览视图,让我们快速查看我们的 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的资料请关注脚本之家其它相关文章!

相关文章

  • 使用JAXBContext 设置xml节点属性

    使用JAXBContext 设置xml节点属性

    这篇文章主要介绍了使用JAXBContext 设置xml节点属性的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java中的函数式编程

    Java中的函数式编程

    这篇文章介绍Java中的函数式编程,函数式编程是一种编程范式,其中程序是通过应用和组合函数来构造的。它是一种声明式编程范式,其中函数定义是表达式树,每个表达式树返回一个值,而不是一系列改变程序状态的命令语句,具体情况请看下文,希望对你有所帮助
    2021-10-10
  • Mybatis-Plus 全局配置无效的解决方案

    Mybatis-Plus 全局配置无效的解决方案

    这篇文章主要介绍了Mybatis-Plus 全局配置无效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java如何使用itext向PDF插入数据和图片

    Java如何使用itext向PDF插入数据和图片

    最近项目中使用到Java实现写入PDF文件,这篇文章主要给大家介绍了关于Java如何使用itext向PDF插入数据和图片的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Java设计图形与多媒体处理

    Java设计图形与多媒体处理

    本文主要介绍了Java的图形设计以及多媒体处理,源码也做了详细的注释,对于初学者应该不难。详细请看下文
    2015-09-09
  • Java语言实现简单FTP软件 FTP本地文件管理模块实现(9)

    Java语言实现简单FTP软件 FTP本地文件管理模块实现(9)

    这篇文章主要为大家详细介绍了Java语言实现简单FTP软件,FTP本地文件管理模块的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 解决在Gradle/IDEA中无法正常使用readLine的问题原因

    解决在Gradle/IDEA中无法正常使用readLine的问题原因

    这篇文章主要介绍了在Gradle/IDEA中无法正常使用readLine的解决方法,原因是由于Gradle的标准输入默认并不与系统标准输入绑定,需手动设置,需要的朋友可以参考下
    2021-12-12
  • Java中获取webapp路径问题详解

    Java中获取webapp路径问题详解

    这篇文章主要介绍了Java中获取webapp路径问题详解,WebApp是指基于Web的 系统和 应用,其作用是向广大的最终用户发布一组复杂的内容和功能,本文详解了关于获取路径时候可能出现的问题,需要的朋友可以参考下
    2023-07-07
  • Java中Integer两种转int方法比较

    Java中Integer两种转int方法比较

    本文主要介绍了Java Integer两种转int方法比较。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 详解JAVA中ListIterator和Iterator的辨析

    详解JAVA中ListIterator和Iterator的辨析

    这篇文章主要为大家详细介绍了JAVAListIterator和Iterator的辨析,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论