java8中内置了很多接口 ,它们都标记了@FunctionalInterface注解,FunctionalInterface是个无任何抽象方法的接口。Java8试图阐明,当一个接口被标记上FunctionalInterface,那么它应该被开发者注意:这是个函数式接口,应该用lambda表示其实例对象。
Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
Java8中内置的函数式接口位于 rt.jar的java.util.function包中,主要有:
Consumer 消费者,消费一个东西,没有返回值 void accept(T t)
Predicate 谓词(断言) 处理一个东西,返回布尔值 boolean test(T t)
Function 处理一个东西,有返回值 R apply(T t)
Supplier 供应 函数提供(返回)一个值 T get();
Consumer 接口衍生了以下等接口
IntConsumer 消费(传入)一个int参数
DoubleConsumer 消费(传入)一个double参数
longConsumer 消费(传入)一个long参数
Predicate 接口衍生了以下等接口
IntPredicate 传入一个int参数,返回真假
DoublePredicate 传入一个double参数,返回真假
LongPredicate 传入一个long参数,返回真假
Function 接口衍生了以下等接口
IntFunction
DoubleFunction
LongFunction
ToIntFunction
IntToDoubleFunction
IntToLongFunction
Supplier 接口衍生了以下等接口
IntSupplier 函数提供(返回)一个int值
DoubleSupplier 函数提供(返回)一个double值
LongSupplier 函数提供(返回)一个long值
这些jdk8中内置的函数式接口,我们可以直接拿来使用(采用lambda表达式)
DoubleConsumer c1= (a)->{System.out.println(a+1);};
DoubleConsumer c2= (a)->{System.out.println(a*2);};
c1.accept(3);//输出 4
c1.andThen(c2).accept(3);//输出4 6
IntFunction f=(a)->{return a+1l;};
DoubleFunction f2=(a)->{return a+2d;};
System.out.println(f.apply(10));
System.out.println(f2.apply(10));
IntPredicate f5=(a)->{return true;};
System.out.println(f5.test(10));