介绍
在本实验中,你将学习如何使用 Java 8 的两个最重要的特性——Lambda 表达式和 Stream API。Lambda 表达式用于创建可以作为参数传递给其他方法的匿名函数,而 Stream API 用于对集合执行一系列操作。
在本实验中,你将学习如何使用 Java 8 的两个最重要的特性——Lambda 表达式和 Stream API。Lambda 表达式用于创建可以作为参数传递给其他方法的匿名函数,而 Stream API 用于对集合执行一系列操作。
首先,通过在你的系统上安装最新版本的 Java 来设置 Java 环境。你可以从官方网站下载并安装 Java。安装完成后,打开终端并检查 Java 的版本。
java -version
接下来,在你的 ~/project 目录下创建一个名为 LambdaExpressions.java 的新 Java 文件。
touch ~/project/LambdaExpressions.java
在这个文件中,我们将编写代码来实现 Lambda 表达式和 Stream API。
Lambda 表达式提供了一种简单的方式来创建匿名函数。创建一个 FunctionalInterface,它将表示一个接受两个数字作为输入并返回它们和的函数。
interface Calculator {
int sum(int a, int b);
}
接下来,我们可以使用 Lambda 表达式创建该接口的对象,然后使用该对象调用 sum() 函数。
Calculator adder = (a, b) -> a + b;
int result = adder.sum(10, 20);
System.out.println("Result: " + result);
现在,使用以下命令编译并运行此代码:
javac ~/project/LambdaExpressions.java && java LambdaExpressions
输出应为:
Result: 30
Stream API 用于对集合执行一系列操作。在这一步中,我们将学习如何遍历一个字符串集合,并过滤出以 "A" 开头的字符串。
创建一个包含一些名字的字符串列表以便操作。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Andy");
接下来,使用 Stream API 遍历该集合,过滤出以 "A" 开头的字符串,并将剩余的字符串打印到控制台。
names.stream().filter(s -> s.startsWith("A")).forEach(System.out::println);
现在,使用以下命令编译并运行此代码:
javac ~/project/LambdaExpressions.java && java LambdaExpressions
输出应为:
Alice
Andy
Stream API 提供了一种对集合执行一系列操作的方式。在这一步中,我们将学习如何使用 Stream API 从整数列表中查找最大值和最小值。
创建一个整数列表:
List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);
使用 Stream API 查找列表中的最大值:
Optional<Integer> maxNum = numbers.stream().max(Integer::compareTo);
System.out.println("Maximum number: " + maxNum.get());
使用 Stream API 查找列表中的最小值:
Optional<Integer> minNum = numbers.stream().min(Integer::compareTo);
System.out.println("Minimum number: " + minNum.get());
现在,使用以下命令编译并运行此代码:
javac ~/project/LambdaExpressions.java && java LambdaExpressions
输出应为:
Maximum number: 30
Minimum number: 2
我们可以使用 Stream API 的 forEach() 方法来遍历列表并对每个元素执行操作。
创建一个包含一些名字的字符串列表以便操作:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");
使用 forEach() 方法打印列表中的所有元素:
names.stream().forEach(System.out::println);
现在,使用以下命令编译并运行此代码:
javac ~/project/LambdaExpressions.java && java LambdaExpressions
输出应为:
Alice
Bob
Charlie
Dave
Stream API 可用于对集合进行排序。在这一步中,我们将学习如何对整数列表进行升序排序。
创建一个整数列表以便操作:
List<Integer> numbers = Arrays.asList(1, 3, 2, 4, 5);
使用 Stream API 的 sorted() 方法对列表进行升序排序:
numbers.stream().sorted().forEach(System.out::println);
现在,使用以下命令编译并运行此代码:
javac ~/project/LambdaExpressions.java && java LambdaExpressions
输出应为:
1
2
3
4
5
在这一步中,我们将使用 Stream API 对整数集合进行过滤和排序。
创建一个整数列表以便操作:
List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);
过滤出仅有的偶数,并使用 sorted() 方法按降序排序:
numbers.stream().filter(n -> n % 2 == 0).sorted(Comparator.reverseOrder()).forEach(System.out::println);
现在,使用以下命令编译并运行此代码:
javac ~/project/LambdaExpressions.java && java LambdaExpressions
输出应为:
30
20
10
4
2
在这一步中,我们将学习如何使用 Stream API 获取整数集合的平均值。
创建一个整数列表以便操作:
List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);
使用 Stream API 的 average() 方法获取列表的平均值:
OptionalDouble avg = numbers.stream().mapToInt(Integer::intValue).average();
System.out.println("Average: " + avg.getAsDouble());
现在,使用以下命令编译并运行此代码:
javac ~/project/LambdaExpressions.java && java LambdaExpressions
输出应为:
Average: 12.0
在这一步中,我们将学习什么是 Optional 以及如何创建一个 Optional 对象。
创建一个空字符串的 Optional 对象:
Optional<String> emptyString = Optional.empty();
使用 isPresent() 方法检查该对象是否为空:
if(emptyString.isPresent()) {
System.out.println(emptyString.get());
}
else {
System.out.println("No value");
}
现在,使用以下命令编译并运行此代码:
javac ~/project/LambdaExpressions.java && java LambdaExpressions
输出应为:
No value
在本实验中,我们学习了如何使用 Java 8 的两个最重要特性——Lambda 表达式和 Stream API。我们学习了如何使用 Lambda 表达式创建匿名函数,如何使用 Stream API 对集合执行一系列操作,以及如何创建 Optional 对象并检查其是否为空。我们还了解了如何使用 Stream API 对集合进行排序、过滤以及获取平均值。通过掌握这些特性,我们可以使用 Java 8 编写高效且简洁的代码。