Java8新功能-lambda表达式 | 张扎瓦的博客

Java8新功能-lambda表达式

Java8中新增的lambda表达式的介绍和用法


为什么需要lambda表达式

场景

在JDK8以前,如果我们需要临时创建一个线程,通常使用匿名内部类的方式实现。

1
2
3
4
5
6
7
8
9
public void test1() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread());
}
});
thread.start();
}

当我们需要对集合进行自定义排序时,通常这么写

1
2
3
4
5
6
7
8
9
10
11
12
13
public void test2() {
List<String> names = new ArrayList<>();
names.add("tom");
names.add("jerry");
names.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});

System.out.println(names);
}

上面两个例子中,我们都是将一段代码当作参数,传入方法中。

使用lambda

在JDK8中,我们可以使用lambda表达式简化代码。

创建线程

1
2
3
4
5
6
public void test3() {
Thread thread = new Thread(() -> {
System.out.println(Thread.currentThread());
});
thread.start();
}

自定义比较器

1
2
3
4
5
6
7
8
9
public void test4() {
List<String> names = new ArrayList<>();
names.add("tom");
names.add("jerry");
names.sort((o1, o2) -> {
return Integer.compare(o1.length(), o2.length());
});
System.out.println(names);
}

()里写参数名,如果没有参数,可以不写。{}里写表达式,如果无法用一个表达式表示,也可以写多条语句。

1
2
3
4
5
names.sort((o1, o2) -> {
System.out.println("123");
...
return Integer.compare(o1.length(), o2.length());
});

参数的类型如果可以被推导,也可以省略。

如果需要赋值,也可以这样:

1
2
3
Comparator<String> comparator = (o1, o2) -> {
return Integer.compare(o1.length(), o2.length());
};
如果我的文章对您有所帮助,不妨打赏一杯豆浆以资鼓励(○` 3′○)