java 8 - Lambda表达式
lambda表达式是java8最突出的特性。是用来简化一种特殊的匿名内部类的语法,当一个匿名内部类只有一个方法时,则可以使用lambda表达式。
什么是匿名内部类?
new 接口/类名(参数1, 参数2...){
实现方法1(){}
实现方法2(){}
......
};
1
2
3
4
5
2
3
4
5
# 表达式语法
// 参数 -> 方法体
parameter -> expression body
1
2
2
表达式特征
- 可省略的参数类型,无需声明参数类型,编译器会自动根据匿名方法传参对位识别类型
- 可省略的(),当匿名方法只有一个传参时则可省略
- 可省略的{},当匿名方法体内只有一行语句时则可省略
- 可省略的return,当匿名方法有返回值且方法体内只有一行语句则可省略,该特征需要与3一起使用
# 示例
public class StreamDemo {
public static void main(String[] args) {
// 完整写法
doMethod(new MyInterface() {
@Override
public void method(String str) {
System.out.println(str);
}
}, "匿名方法执行咯~");
// 1.lambda表达式
doMethod((str) -> {
System.out.println(str);
}, "lambda表达式执行咯~");
// 2.省略()
doMethod(str -> System.out.println(str), "lambda表达式执行咯~");
// 3.省略{}
doMethod((str) -> System.out.println(str), "lambda表达式执行咯~");
}
private static void doMethod(MyInterface myInterface, String str) {
myInterface.method(str);
}
interface MyInterface {
void method(String str);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
如果是有返回值的方法:
public class StreamDemo {
public static void main(String[] args) {
// 完整写法
String str1 = doMethod(new MyInterface() {
@Override
public String method(String str) {
return str;
}
}, "匿名方法执行咯~");
// 1.lambda表达式
String str2 = doMethod((str) -> {
return str;
}, "lambda表达式执行咯~");
// 4.省略(){}return
String str3 = doMethod(str -> str, "lambda表达式执行咯~");
}
private static String doMethod(MyInterface myInterface, String str) {
return myInterface.method(str);
}
interface MyInterface {
String method(String str);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
lambda表达式的常见使用
public class StreamDemo {
public static void main(String[] args) {
new Thread(() -> System.out.println("异步任务执行..."));
Stream.of(1, 2, 3, 4).map(number -> number + 1)
.forEach(number -> System.out.println(number));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 优缺点
优点: 毫无疑问的优雅,简洁
缺点: 优雅往往难以理解,可读性差,复杂的lambda表达式一眼望去确实让人难以下手,当然这跟程序员对lambda表达式的熟练度有关,有部分保守的程序员的确不太接纳这种写法,我个人是非常welcome的,嘻嘻
上次更新: 2024/01/11 17:06:16