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