1 为什么使用lambda表达式
先看几个Java8之前常用的例子
创建线程并启动(不适用Lambda 表达式)
public class Worker implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
dowork(i);
}
}
private void dowork(int i) {
System.out.println("thread "+i);
}
public static void main(String[] args) {
Worker worker = new Worker();
new Thread(worker).start();
}
}
(使用lambda表达式)
new Thread(() -> {
for (int i = 0; i < 100; i++) {
doWork();
}
}).start();
比较数组
// 定义一个比较器
public
class
LengthComparator
implements
Comparator<String> {
@Override
public
int
compare(String first, String second) {
return
Integer.compare(first.length(), second.length());
}
}
//对字符数组进行比较
Arrays.sort(words,
new
LengthComparator());
// 定义一个比较器
public
class
LengthComparator
implements
Comparator<String> {
@Override
public
int
compare(String first, String second) {
return
Integer.compare(first.length(), second.length());
}
}
//对字符数组进行比较
Arrays.sort(words,
new
LengthComparator());
比较数组(采用Lambda版本)
Lambda表达式的语法
格式:(参数) -> 表达式
其中:
- 参数可以为0-n个。如果有多个参数,以逗号(,)分割。如果有一个参数,括号()可以省去;如果没有参数,括号()也不能省去。参数前可以加类型名,但由于自动类型推导功能,可以省去。
- 表达式可以是一行表达式,也可以是多条语句。如果是多条语句,需要包裹在大括号{}中。
- 表达式不需要显示执行返回结果,它会从上下文中自动推导。
以下是一些例子:
一个参数
多个参数
0个参数
表达式块