Java函数的Lambda表达式使用方法及注意事项。
Lambda表达式是Java 8中引入的一个新特性,它是一种精简的函数式编程方法,可以用更简洁的方式来实现函数式接口的实例化。
Lambda表达式的基本语法如下:
(parameter) -> expression
或
(parameter) -> { statements; }
其中,parameter表示方法的参数,expression或statements表示方法的返回值或执行的语句,实现了函数式接口的实例化。
Lambda表达式的使用方法
Lambda表达式的使用方法主要有以下几种:
1. 变量赋值
可以将Lambda表达式赋值给一个函数式接口变量,这个变量可以接收函数式接口实现类的实例或Lambda表达式。
例:
List<String> names = new ArrayList<>();
names.add("John");
names.add("Smith");
names.forEach(name -> System.out.println(name));
2. 作为函数式接口的实例
Lambda表达式可以作为函数式接口的实例传递给方法,实现回调。
例:
public interface Calculator {
int calculate(int a, int b);
}
public class Main {
public static void main(String[] args) {
Calculator calculator = (a, b) -> a + b;
int result = calculate(calculator, 2, 3);
System.out.println(result);
}
public static int calculate(Calculator calculator, int a, int b) {
return calculator.calculate(a, b);
}
}
3. 链式调用
Lambda表达式可以用于链式调用,例如Stream API中的map和filter方法。
例:
List<String> names = new ArrayList<>();
names.add("John");
names.add("Smith");
long count = names.stream().filter(name -> name.length() > 4)
.map(String::toUpperCase)
.count();
System.out.println(count);
4. 启动线程
Lambda表达式可以用于启动线程。
例:
new Thread(() -> {
// 线程执行的代码
}).start();
Lambda表达式的注意事项
1. 形参类型可以省略,但推荐写上。
2. 表达式体和代码块体不可混用。
3. 表达式体只有一条语句时,可省略大括号;若有多条语句,则必须写大括号,并用分号分隔语句。
4. Lambda表达式中所使用的变量必须是final或effectively final的。
5. Lambda表达式不能访问非final的局部变量。
6. Lambda表达式中可以有多个参数,中间以逗号隔开。
7. Lambda表达式可以没有参数,但必须保留空的括号。
总结
Lambda表达式是Java 8中引入的一个新特性,可以用更简洁的方式来实现函数式接口的实例化。它的使用方法包括变量赋值、作为函数式接口的实例、链式调用以及启动线程等。需要注意的是,Lambda表达式中所使用的变量必须是final或effectively final的,且Lambda表达式不能访问非final的局部变量。
