什么是lambda表达式
lambda表达式是一个简短的代码块,它接受参数并返回一个值。lambda 表达式与方法类似,但它们不需要名称,并且可以直接在方法中实现。
lambda表达式有什么作用
- 允许将函数视为方法参数,或将代码视为数据。
- 可以创建不属于任何类的函数。
- lambda 表达式可以像对象一样传递并按需执行。
lambda表达式的语法
1
2
3
4
5
| parameter -> expression
(parameter1, parameter2) -> expression
(parameter1, parameter2) -> { code block }
|
简单的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
// 打印ArrayList中所有元素
numbers.forEach((n) -> System.out.println(n));
// 打印ArrayList中所有偶数
numbers.forEach((n) -> {
if (n % 2 == 0) {
System.out.println(n);
}
});
}
}
|
如果变量的类型是只有一个方法的接口,则Lambda表达式可以存储在变量中。Lambda表达式应该具有与该方法相同数量的参数和相同的返回类型。Java 内置了许多此类接口,例如Consumer接口(表示接受单个输入参数且不返回结果的操作。)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
Consumer<Integer> method = (n) -> {
if (n % 2 == 0) {
System.out.println(n);
}
};
numbers.forEach(method);
}
}
|
lambda表达式可以作为函数的参数。
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
| import java.util.ArrayList;
interface NumFunction {
boolean apply(int s);
}
public class Main {
private static void printNumWithCondition(ArrayList<Integer> nums, NumFunction condition) {
nums.forEach((num) -> {
if (condition.apply(num)) {
System.out.println(num);
}
});
}
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
NumFunction isEven = (num) -> num % 2 == 0;
printNumWithCondition(numbers, isEven);
}
}
|
注:以上代码也可以用匿名内部类实现。即lambda可以简化一些匿名内部类的书写。
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
| import java.util.ArrayList;
interface NumFunction {
boolean apply(int s);
}
public class Main {
private static void printNumWithCondition(ArrayList<Integer> nums, NumFunction condition) {
nums.forEach((num) -> {
if (condition.apply(num)) {
System.out.println(num);
}
});
}
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
// 使用匿名内部类
NumFunction isEven = new NumFunction() {
@Override
public boolean apply(int s) {
return s % 2 == 0;
}
};
printNumWithCondition(numbers, isEven);
}
}
|