查看原文
其他

IntelliJ IDEA 小技巧: Stream Trace 功能!

程序猿DD 2021-11-13

The following article is from 日拱一兵 Author tan日拱一兵

前言

自从 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 操作处打上断点,逐步查看结果,就像这样:

用好 Spring AOP,天降大锅从容应对!

我们需要各种单步调试,不是很直观,我们迫切的需要个一览视图,让我们快速查看我们的 Stream 结果

可视化调试

同样先选择行断点,以 Debug 模式进入程序:

Spring MVC用ResponseEntity返回可实现更强大的功能

接下来会弹出 Stream Trace,整个 Stream 操作尽显眼前

SpringBoot 部署 Jar 文件,瘦身优化指南 !

同样可以点击左下角的 Flat Mode 按钮,将整个视图扁平化

一条 update 语句引起的事故,这回让开发长长记性!!

在实际业务中,我们通常对集合进行各种 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 流程,查看对象属性等

知乎高赞:那些学计算机的女生后来都怎么样了?

总结

这个简单的功能,看一遍就会,相信可以在日常的调试中对你有很大帮助,接下来会介绍更多的你不曾留意又很高级调试技巧。

你用过这个功能吗?你还知道哪些高级技巧?

欢迎留言探讨(快向下看)


往期推荐

用好 Spring AOP,天降大锅从容应对!

SpringBoot 部署 Jar 文件,瘦身优化指南 !

知乎高赞:那些学计算机的女生后来都怎么样了?

微信继续加持上班摸鱼功能!网友:离被开除更进一步...

共同创造最好的OS,openEuler Developer Day 报名通道开启

以读侦探小说思维学习技术,让技术变得简单有趣

技术干货,高效工具,实战技巧,珍藏资料,打捞你需要的一切

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存