Lambda表达式
Lambda表达式是Java8中引入的一个重要特性,它允许以一种更简洁、更直观的方式来表示可传递的代码块。 Lambda表达式可以看作是一种轻量级的匿名函数,它可以像参数一样传递给方法,或者作为方法的返回值。
语法
java
// 完整Lambda表达式语法格式
(parameter1, parameter2, ...) -> {
statements1;
statements2;
// 若存在返回值
return value;
}
// 省略参数括号
p -> {
statements1;
statements2;
return value;
}
// 省略表达式大括号和分号
p -> System.out.println("Hello World")
// 无参不能省略括号
() -> System.out.println("Hello World")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
提示
- 若Lambda只有一个参数,可以省略参数括号。
- 若Lambda的主体若只有一行表达式,则可以省略大括号。
- Lambda常配合方法引用一起使用。
示例
java
public class LambdaTest {
public static void main(String[] args) {
// 判断数字是否是奇数
Predicate<Integer> isOdd = a -> (a & 1) == 1;
System.out.println(isOdd.test(4));
// 平方和是否是奇数
BiFunction<Integer, Integer, Boolean> isQuadraticSumOdd = (a, b) -> {
int x = a * a, y = b * b;
return isOdd.test(x + y);
},
// 表达式主体改为行内
inlineIsQuadraticSumOdd = (a, b) -> isOdd.test(a * a + b * b);
System.out.println(isQuadraticSumOdd.apply(1, 2));
System.out.println(inlineIsQuadraticSumOdd.apply(2, 4));
// 单个参数消费
Consumer<Object> println = o -> System.out.println(o),
// 或者使用方法引用
printlnMethodReference = System.out::println;
println.accept("Hello");
printlnMethodReference.accept("World");
// 多个参数的消费者
BiConsumer<Integer, Integer> print = (a, b) -> {
int x = a * a, y = b * b;
println.accept(x + y);
},
// 表达式主体改为行内
inlinePrint = (a, b) -> println.accept(a * a + b * b);
print.accept(1, 2);
inlinePrint.accept(3, 4);
}
}
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