java8--函数式接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jasnet_u/article/details/83474998

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));

猜你喜欢

转载自blog.csdn.net/jasnet_u/article/details/83474998