前言
开发工作中,没有谁不会用到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,还应该有点不一样的技巧[呲牙]。
关注小编,与你一同学习成长。