在以上讲解的lambda表达式我还是有些不理解,请用大量实例帮我讲解一下
时间: 2024-10-10 19:05:25 浏览: 12
当然,我会尽力通过更多的实例帮助您理解Lambda表达式。
**1. 作为方法参数:**
比如我们有一个`Person`类,有`sayHello`方法,现在我们要让所有的人说“你好”。我们可以定义一个接受`Runnable`类型的接口方法,然后使用Lambda表达式传递:
```java
public class Person {
public void sayHello() { System.out.println("Hello"); }
}
public static void greetAll(Consumer<Person> consumer) {
List<Person> people = new ArrayList<>();
// 添加一些人...
for (Person person : people) {
consumer.accept(person); // 使用Lambda表达式,传递sayHello动作
person.sayHello(); // 或者直接调用person的方法
}
}
```
在`greetAll`方法里,`consumer.accept(person)`这部分就是Lambda表达式,表示对每个人调用`sayHello`方法。
**2. 作为方法体:**
在Java 8及以上版本,可以将函数式接口(只有一个抽象方法的接口)的实现完全替换为Lambda表达式,比如`Function`接口:
```java
import java.util.Map;
import java.util.function.Function;
Map<String, Integer> grades = Map.of("John", 90, "Jane", 95);
int averageGrade = grades.values().stream()
.mapToInt(Integer::intValue)
.average() // Function<Integer, Double>
.orElse(0); // 这里就是Lambda表达式
System.out.println("Average grade: " + averageGrade);
```
这里,`average`方法接收一个`Function<Integer, Double>`类型的参数,我们用一个简短的Lambda表达式实现了这个函数,计算整数列表的平均值。
**3. 集合操作:**
Java Stream API提供了大量的操作,如filter(), map(), sorted()等,都是基于Lambda表达式的。例如筛选出偶数:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0) // 这里的n->n%2==0是Lambda表达式
.collect(Collectors.toList());
```
阅读全文