IDEA 下,老司机教你如何 debug lambda

原创
2019/03/19 10:04
阅读数 1W

目前程序员市场环境下,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 的调试原来可以如此简单。

 

原文链接:https://www.firegod.cn/2019/03/idea-%E4%B8%8B%EF%BC%8C%E8%80%81%E5%8F%B8%E6%9C%BA%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95-debug-lambda/

展开阅读全文
打赏
1
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
1
分享
返回顶部
顶部