IDEA 下,老司机教你如何 debug lambda
发表于2019-03-192020-03-03 作者 Ryan
目前程序员市场环境下,Java 党的 lamda 语法已经无处不在,比如大家熟悉的 Spring 5.x 框架,lambda 满天飞啊!
这里说一下,为什么要玩 lambda 这种写法, 他与面向对象有什么不同。
1. 面向对象的编写方法,是程序员死命的敲击键盘告诉计算机,它要做什么,先做什么后做什么; 2. 而 lambda 是程序来告知程序员它先要做什么,后要做什么; 3. lambda 的写法可以减少你敲击键盘的次数,让你有更多的时间可以端起 coffe;
lamda 的语法和方式我这里就不在说明了,读者有兴趣可以直接阅读 《Java 8 实战》这本书,有详细的说明,或者阅读官方文档;
说明一下:
- windows 7
- oracle hotspot jdk 1.8
- InteliJ IDEA 2018.1.5
- Apache Maven 3.3.3
下面,我们从一个示例说起。我们要使用Java 8 中的 lambda 语法,首先需要保证我们新建的项目 language level 8 以上才行。如下图
以上两项必须确保是是 8+ ,否则不会达到预期的功能及效果。
接下来,新建一个 Student 示例类,代码如下:
private static class Student{
private String id;
private String name;
private int age;
private boolean graduation;
public Student(String id, String name, int age, boolean graduation) {
this.id = id;
this.name = name;
this.age = age;
this.graduation = graduation;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isGraduation() {
return graduation;
}
public void setGraduation(boolean graduation) {
this.graduation = graduation;
}
@Override
public String toString() {
return "Student{" +
"id='" + id + ''' +
", name='" + name + ''' +
", age=" + age +
", graduation=" + graduation +
'}';
}
}
接下来,编写我们的程序主类,如下图:
public static void main(String[] args) {
List<String> data = new ArrayList<String>();
data.add("1,Ryan,25,true");
data.add("2,zhangsan,22,false");
data.add("3,lisi,18,false");
data.add("4,wangwu,35,true");
data.add("5,liliu,20,false");
Set<String> collect = data.stream().map(d -> {
String[] split = d.split(",");
return new Student(split[0], split[1], Integer.parseInt(split[2]), Boolean.parseBoolean(split[3]));
}).filter(Student::isGraduation).map(Student::getName).collect(Collectors.toSet());
System.out.println(collect);
}
说明一下,这里主要是针对学生的数据进行解析,并过滤出已经毕业的学生,获取他们的姓名,最后输出;
在这里,我们先要对 Lambda 进行调试,打上 断点,一个 F8 可能就过去了,根本看不到 .map(Student::getName) 的结果,这个时候怎么办?也有可能遇到类似笔者这样尴尬的事情(不是语句,好尴尬呀!):
我们要针对 lambda 进行调试, IDEA 为我们提供了一个友好的方式,那就是“Trace Current Stream Chain”, 这个功能,在 debug 的 Tab 中,如下图所示:
我们直接点击它即可,如果你的 IDEA 下,不存在这样的功能,务必检查自己的 IDEA 版本。点击之后需要稍微等一会儿,会出现类似笔者的画面:
如果你留意的话,可以看到 左下角的 “Split Mode”进行切换显示,lambda 的每一步操作及结果都能够显示在这里,一目了然,是不是很人性化!
lambda 的调试原来可以如此简单。
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击