欢迎访问宙启技术站
智能推送

Java函数式接口的定义和使用方式

发布时间:2023-06-30 11:13:32

Java函数式接口是Java 8引入的新特性,它是指只包含一个抽象方法的接口。函数式接口可以赋予Lambda表达式一个类型,从而使得Lambda表达式能够作为函数式接口的实例使用。

Java中的函数式接口使用@FunctionalInterface注解来标识。@FunctionalInterface注解保证该接口只包含一个抽象方法,但是允许包含多个默认方法或静态方法。如果一个接口被标记为函数式接口,但实际包含多个抽象方法,则编译器会报错。

函数式接口的使用方式首先是定义一个函数式接口,例如:

@FunctionalInterface
public interface MyFunction {
    void doSomething(String param);
}

接下来,我们可以使用Lambda表达式来实现这个函数式接口:

MyFunction myFunction = (String param) -> System.out.println("Doing something with " + param);

Lambda表达式的参数列表与抽象方法的参数列表一致,Lambda表达式的方法体即为抽象方法的实现。

接着,我们可以调用函数式接口的抽象方法:

myFunction.doSomething("example");

上述代码将输出"Doing something with example"。

除了Lambda表达式,我们还可以使用方法引用来实现函数式接口,方法引用是指直接引用已有的方法作为Lambda表达式的实现。例如,我们可以使用方法引用来实现上述的函数式接口:

MyFunction myFunction = System.out::println;

使用方法引用的方式与Lambda表达式的调用方式一致。

函数式接口还可以与Java Stream API一起使用,Stream API提供了丰富的函数式接口供我们使用。例如,我们可以使用Predicate函数式接口来过滤Stream中的元素:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
                                   .filter(n -> n % 2 == 0)
                                   .collect(Collectors.toList());

上述代码将在集合中过滤出所有偶数,并将结果收集到一个新的集合中。

总结起来,Java函数式接口是一种只包含一个抽象方法的接口,通过Lambda表达式或方法引用来实现该接口的抽象方法。函数式接口的使用主要包括接口的定义、Lambda表达式或方法引用的实现,以及调用抽象方法。函数式接口可以方便地与Java Stream API一起使用,提供了更加灵活和简洁的编程方式。