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的资料请关注脚本之家其它相关文章!

相关文章

  • Java拦截器Interceptor实现原理及代码示例

    Java拦截器Interceptor实现原理及代码示例

    本文详细讲解了Java拦截器Interceptor实现原理及代码示例,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • java调用shell命令并获取执行结果的示例

    java调用shell命令并获取执行结果的示例

    今天小编就为大家分享一篇java调用shell命令并获取执行结果的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • SpringMVC数据校验+VO++脱敏实战指南

    SpringMVC数据校验+VO++脱敏实战指南

    SpringMVC通过整合BeanValidation规范,提供灵活的数据校验机制,核心步骤包括添加校验注解、使用@Valid触发校验、捕获错误,可选扩展,文章还介绍了全局异常处理、自定义校验注解以及VO层的使用,感兴趣的朋友一起看看吧
    2025-03-03
  • Java多线程之线程的创建

    Java多线程之线程的创建

    这篇文章主要介绍了Java多线程之线程的创建,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Java把多个对象的list的数据合并的方法示例

    Java把多个对象的list的数据合并的方法示例

    在Java中合并多个List可以使用遍历、Stream API或Apache Commons Collections,通过遍历各个List并将元素添加到新List实现合并,Java 8提供了Stream API,使用Stream.of()和flatMap()可以简洁地合并List,文中给出了多种方法示例,需要的朋友可以参考下
    2024-09-09
  • 使用Pinyin4j进行拼音分词的方法

    使用Pinyin4j进行拼音分词的方法

    下面小编就为大家分享一篇使用Pinyin4j进行拼音分词的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • 数组重排序(如何将所有奇数都放在所有偶数前面)的深入分析

    数组重排序(如何将所有奇数都放在所有偶数前面)的深入分析

    本篇文章是对数组重排序(如何将所有奇数都放在所有偶数前面)的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Flink作业Task运行源码解析

    Flink作业Task运行源码解析

    这篇文章主要为大家介绍了Flink作业Task运行源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java设计模式之模版方法模式简介

    Java设计模式之模版方法模式简介

    这篇文章主要介绍了Java设计模式之模版方法模式,需要的朋友可以参考下
    2014-07-07
  • Java Swing JPanel面板的使用方法

    Java Swing JPanel面板的使用方法

    这篇文章主要介绍了Java Swing JPanel面板的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论