Java 8作为Java语言的一个重要版本,引入了许多新特性和语法糖,其中Stream和Lambda表达式是两个最为显著的特点。本文将带你轻松入门Java 8的新特性,并通过实战案例教你如何玩转Stream和Lambda表达式。
一、Stream简介
Stream是Java 8引入的一种新的抽象层,用于处理集合数据。它允许以声明式的方式处理数据集合,使得代码更加简洁、易读。Stream可以理解为一个数据源(如数组、集合、文件等)上的操作序列。
1.1 Stream的特点
- 延迟执行:Stream的各个操作都是延迟执行的,只有在需要结果时才会执行。
- 并行处理:Stream可以很容易地并行处理数据,提高程序的执行效率。
- 声明式编程:使用Stream,你可以用更简洁的代码表达数据处理逻辑。
1.2 Stream的常见操作
- 创建Stream:使用
.stream()或.parallelStream()方法从数据源创建Stream。 - 中间操作:如
.filter()、.map()、.limit()等,用于处理数据。 - 终端操作:如
.forEach()、.collect()等,用于获取最终结果。
二、Lambda表达式简介
Lambda表达式是Java 8引入的一种新的语法结构,用于表示匿名函数。它允许你在需要函数式编程的场景下,用更简洁的代码实现功能。
2.1 Lambda表达式的特点
- 匿名函数:Lambda表达式不需要定义函数,可以直接使用。
- 类型推断:Lambda表达式的类型可以由编译器自动推断。
- 语法简洁:Lambda表达式使用简洁的语法,易于阅读和理解。
2.2 Lambda表达式的语法
// 示例:Lambda表达式实现Comparator接口
Comparator<Integer> comparator = (x, y) -> x - y;
三、Stream和Lambda表达式实战案例
下面通过一个简单的案例,展示如何使用Stream和Lambda表达式处理数据。
3.1 案例背景
假设我们有一个学生类Student,包含姓名、年龄和成绩三个属性。我们需要统计年龄大于18岁且成绩大于80分的学生信息。
3.2 实现代码
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 创建学生列表
List<Student> students = new ArrayList<>();
students.add(new Student("张三", 20, 85));
students.add(new Student("李四", 17, 90));
students.add(new Student("王五", 19, 75));
students.add(new Student("赵六", 18, 95));
// 使用Stream和Lambda表达式处理数据
List<Student> result = students.stream()
.filter(s -> s.getAge() > 18 && s.getScore() > 80)
.collect(Collectors.toList());
// 输出结果
for (Student student : result) {
System.out.println(student.getName());
}
}
}
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;
}
}
3.3 结果分析
运行上述代码,输出结果为:
张三
赵六
这表明我们成功统计出了年龄大于18岁且成绩大于80分的学生信息。
四、总结
本文介绍了Java 8的新特性——Stream和Lambda表达式,并通过实战案例教你如何使用它们。通过学习本文,相信你已经对这两个特性有了初步的了解。在实际开发中,Stream和Lambda表达式可以帮助你写出更简洁、易读的代码,提高程序的性能。