模块课程(1/2)
拉姆达表达式
从 Java 8 开始,通过 Lambda 表达式 支持函数式编程。 lambda 表达式本质上是一个匿名方法(没有名称的函数),可以作为参数传递给方法或存储在变量中。
功能接口
lambda 表达式只能用在需要 函数式接口 的地方。函数式接口是一种声明恰好一个抽象方法的接口。 Java 使用可选的 @FunctionalInterface 注释来标记这些接口。
用户定义的功能接口示例:
@FunctionalInterface
interface MathOperation {
int operate(int a, int b);
}在 Java 8 之前,您必须定义一个匿名内部类。使用 lambda,语法可以简化为:
MathOperation addition = (a, b) -> a + b;
int result = addition.operate(5, 3); // Returns 8Lambda 表达式的结构
lambda 的基本语法是:
(parameters) -> { body }
- 不带参数:
() -> System.out.println("Hello") - 单个参数:
x -> x * 2(括号可以省略) - 多个参数:
(x, y) -> x + y - 多行正文:如果正文包含多个语句,则需要大括号
{}和显式return语句。
MathOperation detailedAddition = (a, b) -> {
System.out.println("Adding...");
return a + b;
};Java 中的标准函数式接口
java.util.function 包提供了几个内置的函数接口:
Predicate<T>:接受T类型的参数并返回一个布尔值(test(T t)方法)。Consumer<T>:接受T类型的参数并执行操作而不返回结果(accept(T t)方法)。Function<T, R>:接受参数T并返回结果R(apply(T t)方法)。Supplier<T>:不接受任何参数并返回T类型的值(get()方法)。
自己尝试一下
通过使用将两个整数相加的 lambda 表达式实例化 Calculator 接口来完成代码。然后,调用计算方法并传递 5 和 3,并打印结果。
显示提示
声明“Calculator adder = (a, b) -> a + b;”,然后在 print 调用中调用“adder.calculate(5, 3)”。
3 次尝试后可用的解决方案
使用 lambda 表达式创建一个名为 isLong 的标准函数接口 Predicate<String> 实例,该表达式检查字符串长度是否大于 5 个字符。然后打印“hello world”的测试结果。
显示提示
`Predicate<String>` 的 lambda 接受参数 `s` 并返回 `s.length() > 5` 作为布尔条件。
3 次尝试后可用的解决方案
通过调用 sort() 方法并传递实现 Comparator 的 lambda 表达式(获取两个字符串 s1、s2 并使用 CompareTo 进行比较),按字母顺序对字符串名称列表进行排序。
显示提示
使用“names.sort((s1, s2) -> s1.compareTo(s2));”对列表进行就地排序。
3 次尝试后可用的解决方案