跳至主要內容

IntelliJ IDEA如何优雅的调试Java Stream操作

程序猿DD原创IntelliJ IDEAIntelliJ IDEA大约 3 分钟

IntelliJ IDEA如何优雅的调试Java Stream操作

什么是Stream操作

Stream操作是Java 8推出的一大亮点,它与java.io包里的InputStream和OutputStream是完全不同的概念。Java 8中的Stream是对容器对象功能的增强,它专注于对容器对象进行各种非常便利、高效的 聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API借助于同样新出现的Lambda表达式,极大的提高编程效率和程序可读性。

同时,它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用fork/join并行方式来拆分任务和加速处理过程。通常,编写并行代码很难而且容易出错, 但使用Stream API无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java8中首次出现的java.util.stream是一个函数式语言 + 多核时代综合影响的产物。

虽然java.util.stream很强大,但依然还是有很多开发者在实际工作中很少使用,其中吐槽最多的一个原因就是不好调试,一开始确实是这样,因为stream这样的流式操作在DEBUG的时候,是一行代码,直接下一步的时候,其实一下就过去了好多操作,这样我们就很难判断到底是里面的哪一行出了问题。

不过,现在的话,在强大的IDEA支持下,stream的调试其实也没那么难了,下面就来学习一下在IDEA中如何调试stream操作吧。

调试Stream操作

视频演示:点击这里查看open in new window

先来看下面这样的这段代码:

public class StreamTest {

    @Test
    void test() {
        List<String> list = List.of("blog.didispace.com", "spring4all.com", "openwrite.cn", "www.didispace.com");

        List<String> result = list.stream()
                .filter(e -> e.contains("didispace.com"))
                .filter(e -> e.length() > 17)
                .toList();

        System.out.println(result);
    }

}

这段代码的逻辑是通过stream去过滤list集合中的元素,由于有两个filter,所以当出现问题的时候,可能不知道具体是哪个filter中出了问题。

借助强大的IDEA,我们在遇到stream的时候,只需要点击下图中的按钮:

此时会弹出一个Stream操作的跟踪窗口:

该窗口中的标签就是这个stream操作的每一步,我们可以通过点击标签去查看每一步执行前和执行后的结果去判断这里的filter是否执行正确。

是不是一下感觉简单了很多呢?

到这里,也许有的小伙伴动手在尝试的话,可能会问了,怎么没有图里的那个按钮呢?

这里可能跟IDEA的版本有关,目前最新的版本都自带了这个功能,但如果你还在用老版本的IDEA的话,可以通过手工安装下面这个插件Java Stream Debugger来拥有这个功能:

好了,今天的分享就到这里,如果你还没有用过这个调试功能的话, 赶紧打开IDEA试一试吧!

上次编辑于:
贡献者: dd,程序猿DD