Java 8 中引入了Stream api,带来了很多的方便,如果你还不了解,可以看这篇:Java 16都出来了,你还不会Java 8 Stream?
为什么要分享今天这个文章呢?
前几天公司新来了一个开发,发现他代码几乎没有写过任何一个Stream方法,干货君就和这位小伙伴聊起来,原来他认为idea等工具无法直接调试Stream方法,当方法出现异常时,处理不太方便,因此没有使用。
其实idea很早之前确实不支持,后来更新了相关功能,今天给大家分享一下,如何调试Stream api相关代码。
首先我们先写一段代码如下:
User xiaoming = new User("xiaoming",18);
User xiaohong = new User("xiaohong",19);
User zhangsan = new User("zhangsan",18);
List<User> list = new ArrayList<>();
list.add(xiaoming);
list.add(xiaohong);
list.add(zhangsan);
list.stream().filter(user -> {
if (user.getAge() > 18 && user.getName().startsWith("xiao")) {
System.out.println(user.getName().toLowerCase());
return true;
} else {
System.out.println(user.getName().toUpperCase());
return false;
}
}).forEach(user -> System.out.println(user.getName()));
我们在stream这行加入断点,执行debug
然后在调试工具栏,最右侧可以看到一个按钮(Trace Current Stream Chain),如下图
点击可以看到idea会弹出一个Stream Trace的窗口,可以查看stream的每一步中间操作,非常直观。
如果没有Trace Current Stream Chain 按钮,请换高版本idea试一试。
其实直接在lamada表达式中打断点,也可以直接debug,只是没有那么直观。
另外,有时候调试也可以适当使用eval工具,如下图
可以在debug的时候,让eval执行一段方法,查看结果,甚至可以新写功能,用eval去验证代码的正确性,如下图
eval也可以处理stream的api,只是没有专门的stream调试工具方便。