lambda表达式是Java 8引入的一种新特性,用于简化函数式接口的匿名内部类的编写。lambda表达式的语法如下:
(形式参数) -> {代码块}
lambda表达式的作用是代替匿名内部类,使代码更加简洁和易读。在使用lambda表达式之前,需要满足以下步骤:
1. 创建函数式接口:函数式接口是指只有一个抽象方法的接口。可以使用 @FunctionalInterface
注解来确保接口满足函数式接口的要求。
@FunctionalInterface
interface Eatable {
void eat();
}
2. 在测试类中创建方法来调用接口对象:由于接口本身没有对象,只能通过调用接口的实现类的对象来使用。
public class Test {
public static void useEatable(Eatable e) {
e.eat();
}
public static void main(String[] args) {
useEatable(new EatableImpl()); // 创建实现类对象并调用
useEatable(new Eatable() { // 使用匿名类实现
@Override
public void eat() {
System.out.println("Eating with anonymous class");
}
});
useEatable(() -> System.out.println("Eating with lambda expression")); // 使用lambda表达式
}
}
3. 使用lambda表达式作为参数传递:在Java 8中,许多集合类提供了 forEach
方法,可以接受一个函数式接口作为参数,用于对集合中的每个元素进行操作。
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
list.forEach((String fruit) -> {
System.out.println(fruit);
});
关键点总结如下:
1. 函数式接口:lambda表达式需要基于函数式接口来使用。
2. 函数式接口必须有且只能有一个抽象方法。
3. 调用时,参数为函数式接口类型。