Java 8作为Java语言的一个重要版本,引入了许多新的特性和改进,其中最引人注目的莫过于Stream API和Lambda表达式。这些新特性不仅让Java语言更加现代化,也极大地提高了开发效率。本文将通过实战案例,带你轻松掌握Java 8的新特性。
Stream API:数据处理的新方式
Stream API是Java 8引入的一个非常强大的数据处理工具。它允许开发者以声明式的方式处理数据集合,这使得代码更加简洁、易读。下面通过一个简单的例子来介绍Stream API的使用。
1. 创建Stream
List<String> list = Arrays.asList("Apple", "Banana", "Cherry", "Date");
Stream<String> stream = list.stream();
在这个例子中,我们首先创建了一个字符串列表,然后通过调用stream()方法创建了一个Stream对象。
2. 筛选和排序
List<String> filtered = stream.filter(s -> s.startsWith("A"))
.sorted()
.collect(Collectors.toList());
在这个例子中,我们使用filter()方法筛选出以”A”开头的字符串,然后使用sorted()方法对结果进行排序,最后通过collect()方法将结果收集到一个新的列表中。
3. 映射和转换
List<String> mapped = stream.map(String::toUpperCase)
.collect(Collectors.toList());
在这个例子中,我们使用map()方法将所有字符串转换为大写形式。
4. 收集结果
Set<String> unique = stream.distinct()
.collect(Collectors.toSet());
在这个例子中,我们使用distinct()方法去除重复的元素,并将结果收集到一个Set中。
Lambda表达式:简化代码的新方式
Lambda表达式是Java 8引入的另一个重要特性,它允许开发者以更简洁的方式编写代码。下面通过一个简单的例子来介绍Lambda表达式的使用。
1. 简单的Lambda表达式
Runnable r = () -> System.out.println("Hello, World!");
r.run();
在这个例子中,我们创建了一个Lambda表达式,它没有参数,只包含一个System.out.println调用。
2. 使用Lambda表达式作为函数式接口的实现
Comparator<String> comparator = (s1, s2) -> s1.compareTo(s2);
在这个例子中,我们使用Lambda表达式作为Comparator接口的实现。
实战案例:使用Stream API和Lambda表达式处理数据
下面通过一个实战案例,展示如何使用Stream API和Lambda表达式处理数据。
1. 数据准备
假设我们有一个学生类,包含姓名、年龄和成绩三个属性。
class Student {
private String name;
private int age;
private double score;
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getScore() {
return score;
}
}
2. 使用Stream API和Lambda表达式处理数据
List<Student> students = Arrays.asList(
new Student("Alice", 20, 90.0),
new Student("Bob", 21, 85.0),
new Student("Charlie", 22, 95.0)
);
// 筛选年龄大于20岁的学生
List<Student> filteredStudents = students.stream()
.filter(s -> s.getAge() > 20)
.collect(Collectors.toList());
// 获取年龄大于20岁的学生的平均成绩
double averageScore = students.stream()
.filter(s -> s.getAge() > 20)
.mapToDouble(Student::getScore)
.average()
.orElse(0.0);
System.out.println("Average score of students over 20: " + averageScore);
在这个例子中,我们首先创建了一个学生列表,然后使用Stream API和Lambda表达式筛选出年龄大于20岁的学生,并计算他们的平均成绩。
总结
Java 8的新特性让Java语言更加现代化和强大。通过本文的介绍,相信你已经对Stream API和Lambda表达式有了初步的了解。在实际开发中,熟练掌握这些新特性,将大大提高你的开发效率。