四时宝库

程序员的知识宝库

idea调试java8 stream流的小技巧(idea调试java8+stream流的小技巧是什么)

前言

开发工作中,没有谁不会用到debug调试吧?对于java8中stream流的调试你们又是怎么debug的呢?譬如下面这一段代码,你们是不是打个断点,按F6一步一步的看呢?如果里面的循环比较少的情况,这种debug还可以接受,如果循环比较多的话,可能心里就有点烦了。

List<Integer> collect = Stream.of(1, 2, 3, 4, 5, 6).filter(i -> i % 2 == 0).filter(i -> i > 3).collect(Collectors.toList());

talk is cheap,show me the code

idea 调试技巧

就拿上面那段代码做示例,我们在这段代码上打一个断点,idea中会弹出几个选项,我们就选择行断点,如图1;


接着以debug方式启动,那么断点就会进来;再接着点击idea中 trace current stream chain 按钮,如下图2;

这时我们就会看到图3的样子;


其中,第一个框里面的内容就是最原始的数据,第一个filter 就是过滤掉条件后符合的结果,见图4;第二个filter就是以第一个filter过滤后的结果为原始数据再过滤的结果,见图5;最后collect 就是最终得到的数据,见图6。



当然,我们可以点击flat mode 按钮,这样可以更直观的观察到数据的变化,见图7;

那有人说了,你这是简单的数据类型,复杂的数据类型也能调试吗?

当然可以!道理都是一样的。如下,现在集合中有一批学生,现在想筛选出名字中含字母s的并且年龄大于15的。

        Student s1 = new Student("zs", 18);
        Student s2 = new Student("ls", 34);
        Student s3 = new Student("ww", 23);
        Student s4 = new Student("wr", 15);
        Student s5 = new Student("ln", 16);
        List<Student> list = new ArrayList<>();
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        list.add(s5);

        List<Student> stu = list.stream().filter(s -> s.getName().contains("s")).filter(s -> s.getAge() > 15).distinct().collect(Collectors.toList());
        System.out.println(stu);

在13行这里打断点,debug运行后,打开流的追踪,可以看到图8的结果。

结语

不得不说,idea有的功能确实非常的好用,据说2021版的又添加了nb的功能,你尝鲜了吗?

生活不只有无穷尽的coding,还应该有点不一样的技巧[呲牙]。

关注小编,与你一同学习成长。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接