如何使用Lambda表达式实现自定义的函数式接口?代码举例讲解

Lambda 表达式不仅可以用于现成的函数式接口如 Comparator,还可以用于我们自定义的函数式接口。

首先,我们需要定义一个包含一个抽象方法的接口,这样的接口就称为函数式接口。例如:

@FunctionalInterface 
public interface MathOperation {
    int operate(int a, int b);
}

这个接口只包含一个抽象方法 operate(),所以它就是一个函数式接口。我们可以使用 @FunctionalInterface 注解来检查它确实是函数式接口,这样可以在编译时检查 Lambda 表达式使用是否正确。

然后,我们就可以通过 Lambda 表达式来实现这个接口,例如:

MathOperation add = (a, b) -> a + b; 

此处 (a, b) -> a + b 就是一个 Lambda 表达式,它实现了 MathOperation 接口的 operate() 方法。

我们也可以写更复杂的 Lambda 表达式,例如:

MathOperation sub = (a, b) -> { 
    if (a > b) {
        return a - b;
    } else {
        return b - a; 
    }
};

这个表达式中包含了一个 if-else 语句来决定做加法还是减法。

最后,我们可以通过实现的 MathOperation 接口来调用 operate() 方法,例如:

int result = add.operate(1, 2); // 3
int result2 = sub.operate(2, 3); // 1

通过上面的示例,我们学习到:

  1. 使用 @FunctionalInterface 注解定义函数式接口。
  2. 实现函数式接口使用 Lambda 表达式。
  3. Lambda 表达式可以简单或复杂,包含多条语句和流程控制。
  4. 通过 Lambda 表达式实现的接口可以像普通实现一样调用。

Lambda 表达式和函数式接口的配合为我们提供了更灵活和简洁的代码编写手段。