函数式接口

函数式接口

函数式接口通过一个单一的功能来表现。例如,带有单个compareTo方法的比较接口,被用于比较的场合。Java 8 定义了大量的函数式接口来广泛地用于lambda表达式。

Java 8 引入的一个核心概念是函数式接口(Functional Interfaces)。通过在接口里面添加一个抽象方法,这些方法可以直接从接口中运行。如果一个接口定义唯一一个抽象方法,那么这个接口就成为函数式接口。同时,引入了一个新的注解:@FunctionalInterface。可以把他它放在一个接口前,表示这个接口是一个函数式接口。这个注解是非必须的,只要接口只包含一个方法的接口,虚拟机会自动判断,不过最好在接口上使用注解 @FunctionalInterface 进行声明。在接口中添加了 @FunctionalInterface 的接口,只允许有一个抽象方法,否则编译器也会报错。
部分函数式接口列表

  • BitConsumer:该接口代表了接受两个输入参数T、U,并且没有返回的操作。
  • BiFunction:该接口代表提供接受两个参数T、U,并且产生一个结果R的方法
  • BinaryOperator:代表了基于两个相同类型的操作数,产生仍然是相同类型结果的操作
  • BiPredicate:代表两个参数的断言操作(基于Boolean值的方法)
  • BooleanSupplier:代表了一个给出Boolean值结果的方法
  • Consumer:代表了接受单一输入参数并且没有返回值的操作
  • DoubleBinaryOperator:代表了基于两个Double类型操作数的操作,并且返回一个Double类型的返回值
  • DpubleConsumer:代表了一个接受单个Double类型的参数并且没有返回的操作
  • DoubleFunction:代表了一个接受Double类型的参数并且返回结果的方法
  • DoublePredicate:代表了对一个Double类型的参数的断言操作
  • DoubleSupplier:代表了一个给出Double类型值的方法
  • DoubleToIntFunction:代表了接受单个Double类型参数但返回Int类型结果的方法
  • DoubleToLongFunction:代表了接受单个Double类型参数但返回Long类型结果的方法
  • DoubleUnaryOperator:代表了基于单个Double类型操作数且产生Double类型结果的操作
  • Function:代表了接受一个参数并且产生一个结果的方法
  • IntBinaryOperator:代表了对两个Int类型操作数的操作,并且产生一个Int类型的结果
  • IntConsumer:代表了接受单个Int类型参数的操作,没有返回结果
  • IntFunction:代表了接受Int类型参数并且给出返回值的方法
  • IntPredicate:代表了对单个Int类型参数的断言操作

更多的接口可以参考Java 8官方API手册:java.lang.Annotation Type FunctionalInterface。在实际使用过程中,加有@FunctionalInterface注解的方法均是此类接口,位于java.util.Funtion包中。

一个例子

源代码:函数式编程

public class NewFeaturesTester {
    public static void main(String args[]){
        List list = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

        System.out.println("All of the numbers:");

        eval(list, n->true);

        System.out.println("Even numbers:");
        eval(list, n-> n%2 == 0 );

        System.out.println("Numbers that greater than  5:");
        eval(list, n -> n > 5 );
    }

    public static void eval(List list, Predicate predicate) {
        for(Integer n: list) {
            if(predicate.test(n)) {
                System.out.println(n);
            }
        }
    }
}

输出结果:

All of the numbers:
0
1
2
3
4
5
6
7
8
9
Even numbers:
0
2
4
6
8
Numbers that greater than  5:
6
7
8
9

你可能感兴趣的:(函数式接口)