Java Lambda基礎——Function, Consumer, Predicate, Supplier, 及FunctionalInterface接口

這幾個接口常常與Lambda結合使用,網上固然也有不少介紹,不過有些過於繁瑣,有些又偏簡單,秉着實用主義精神,今天這裏折中一下,把介紹的內容分爲兩部分,第一部分至關於TLDR,總結幾個「口訣」,便於你們記憶,對於更想看用法示例的同窗們,第二部分者提供了全部這些接口的示例。但願對你們有所幫助。html

口訣

    如無參數,請使用Supplier(Use Supplier if it takes nothing)java

    如無返回,請使用Consumer(Use Consumer if it returns nothing)程序員

    如二者都無,請使用Runnable(Use Runnable if it does neither)app

    如二者都有,請使用Function(Use Function if it does both)大數據

    如返回布爾值,請使用Predicate(Use Predicate if it returns a boolean)spa

    如以上皆不能夠,請使用自定義@FunctionalInteface(Use @FunctionalInteface if none of above works)3d

示例

  1. Supplier
private static <T> testSupplier(Supplier<T> supplier) {
    return supplier.get();
}
...
Integer s = testSupplier(() -> 7 + 3); // 不接受任何參數,但會返回數據
System.out.println(s); // 輸出10
  1. Consumer
private static <T> void testConsumer(Consumer<T> consumer, T data) {
    consumer.accept(data);
}
...
testConsumer(System.out::println, "dummy"); // 直接調用println,輸出"dummy",無任何返回
  1. Runnable
private static void testRunnable(Runnable runnable) {
    runnable.run();
}
...
testRunnable(() -> System.out.println("dummy")); // 既無輸入,也無輸出
  1. Function
private static <T, R> testFunction(Function<T, R> function, T data) {
    return function.apply(data);
}
...
Integer f = testFunction((d) -> d * 23); // 既有輸入,也有輸出(將給定值X2)
System.out.println(f); // 輸出6
  1. Predicate
private static <T> boolean testPredicate(Predicate<T> predicate, T data) {
    return predicate.test(data);
}
...
boolean p = testPredicate((d) -> d > 0100); // 接受輸入,輸出布爾值(判斷給定值是否爲正數)
System.out.println(p); // 輸出true
  1. @FunctionalInterface
@FunctionalInterface
public interface CalculationFuncInterface<TUR{
    public R apply(T l, U i);
}
...
private static <T, U, R> testFunctionalInterface(CalculationFuncInterface<T, U, R> cal, T data1, U data2) {
    return cal.apply(data1, data2);
}
...
Integer fi = testFunctionalInterface((a, b) -> a * b, 67); // 接受兩個輸入參數,並返回其乘積
System.out.println(fi); // 輸出42

今天的介紹就先到這,感謝你們,Cheers!



公衆號「程序員雜書館」,歡迎關注。 免費送出O'Reilly 《Spark快速大數據分析》紙質書(亦有一批PDF分享)!
相關文章
相關標籤/搜索