1. 程式人生 > >java8--函式式介面

java8--函式式介面

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