在Java 8发布之前,Java程序员们已经习惯了使用传统的匿名内部类和迭代器来处理集合和数组。然而,随着Java 8的到来,Lambda表达式和Stream API的引入,使得处理集合和数组变得更加简单和高效。本文将详细介绍Java 8的这两个重要特性,并通过实战案例帮助你轻松上手。
Lambda表达式:简洁的代码,强大的功能
Lambda表达式是Java 8引入的一个新特性,它允许我们用更简洁的代码来表示一个函数式接口的实现。在Java 8之前,如果我们想要实现一个接口,通常需要编写一个单独的类或匿名内部类。而Lambda表达式则允许我们在一行代码中完成这个任务。
1. Lambda表达式的基本语法
Lambda表达式的基本语法如下:
(参数列表) -> { 代码块 }
例如,下面是一个使用Lambda表达式实现的Comparator:
Comparator<Integer> comparator = (a, b) -> a - b;
在这个例子中,(a, b) -> a - b就是一个Lambda表达式,它实现了Comparator<Integer>接口。
2. Lambda表达式的应用场景
Lambda表达式可以应用于以下场景:
- 接口只有一个抽象方法时,如
Runnable、Callable、Comparator等。 - 使用匿名内部类时,代码量较多且可读性较差的场景。
- 使用Stream API时,作为中间操作和终端操作。
Stream API:强大的集合处理工具
Stream API是Java 8引入的一个新的抽象层,它允许我们以声明式的方式处理集合和数组。使用Stream API,我们可以轻松地进行过滤、排序、映射、归约等操作。
1. Stream API的基本概念
Stream API由以下几个部分组成:
- Stream:表示一组元素序列。
- 中间操作:对Stream进行一系列操作,如过滤、映射、排序等。
- 终端操作:对Stream进行最终处理,如收集、打印等。
2. Stream API的应用场景
Stream API可以应用于以下场景:
- 处理集合和数组。
- 数据分析、数据挖掘。
- 并行计算。
实战案例:使用Lambda表达式和Stream API进行集合处理
下面我们将通过一个实战案例来展示如何使用Lambda表达式和Stream API进行集合处理。
1. 需求描述
假设我们有一个学生类Student,包含姓名、年龄和成绩三个属性。我们需要找出年龄大于18岁且成绩大于90分的学生。
2. 实现代码
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("张三", 20, 92),
new Student("李四", 19, 88),
new Student("王五", 18, 95),
new Student("赵六", 17, 87)
);
List<Student> result = students.stream()
.filter(s -> s.getAge() > 18 && s.getScore() > 90)
.collect(Collectors.toList());
result.forEach(s -> System.out.println(s.getName() + ", " + s.getAge() + ", " + s.getScore()));
}
}
class Student {
private String name;
private int age;
private int score;
public Student(String name, int age, int score) {
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getScore() {
return score;
}
}
在这个案例中,我们使用Lambda表达式和Stream API实现了对学生集合的过滤操作,找出符合条件的学生,并将结果打印出来。
总结
本文介绍了Java 8的Lambda表达式和Stream API这两个重要特性,并通过实战案例展示了它们在集合处理中的应用。通过学习和使用这两个特性,你可以写出更简洁、更高效的代码。