標籤:lov 實現原理 推導 註解 public jdk 存在 mes pac
函數式介面概述:介面中只有一個抽象方法
下面介紹的可能很抽象,理解不了,至少在我看來單獨的這幾個借口是沒有用的,跟最下面說的 Stream流一起用才會有效果
lambda運算式: (參數列表)->{代碼}lambda運算式(前面有篇文章說過,不詳細說明)
有參數,有傳回值的自訂函數式介面
@FunctionalInterface public interface Sumable { int sum(int a, int b); }
JDK1.8之後的某些函數式介面supplier生產資料函數式介面
目的是生產資料.
目前好像看不出來有什麼用,但是好像和jdk8的Stream流有關.,舉個小例子
package com.wzlove.supplier; import java.util.function.Supplier; /** * 使用supplier函數式介面求數組的最大值 */ public class ArrMaxValue { public static int getMaxValue(Supplier<Integer> sup){ return sup.get(); } public static void main(String[] args) { // 建立數組 int[] arr = {100,20,50,30,99,101,-50}; int maxValue = getMaxValue(()->{ int max = arr[0]; for (int i : arr) { if(i > max){ max = i; } } return max; }); System.out.println("數組中的最大值為:" + maxValue); } }
Consumer消費資料函數式介面
這個方法是用來消費資料的,如何消費,消費規則自己定義.
java.util.function.Supplier
package com.wzlove.comsumer;import java.util.function.Consumer;/** * 使用Consumer函數式介面實現格式化輸出 */public class ConsumerDemo2 { public static void printInfo(String[] strArr, Consumer<String> con1, Consumer<String> con2){ for (int i = 0; i < strArr.length; i++) { con1.andThen(con2).accept(strArr[i]); } } public static void main(String[] args) { String[] strArr = {"迪麗熱巴,女","鄭爽,女","楊紫,女"}; printInfo(strArr,(message)->{ System.out.print("姓名:" + message.split(",")[0] + "。 "); },(message)->{ System.out.println("性別:" + message.split(",")[1] + "。"); }); }}
Predicate判斷函數式介面
Predicate 介面中包含一個抽象方法: boolean test(T t) 。用於條件判斷的情境
預設方法:
Function類型轉換函式式介面
Function 介面中最主要的抽象方法為: R apply(T t) ,根據類型T的參數擷取類型R的結果。
Function 介面中有一個預設的andThen 方法,用來進行組合操作。
package com.wzlove.functionalinterface.function;import java.util.function.Function;/** * */public class FunctionDemo2 { /** * 將String分割,獲得第二個元素,將資料轉化為int,int資料加100,再將int轉化為String * @param str 轉化的資料 * @param fun1 String -> String * @param fun2 String -> Integer * @param fun3 Integer -> String * @return 最後的String */ public static String convert(String str, Function<String,String> fun1, Function<String, Integer> fun2, Function<Integer,String> fun3){ return fun1.andThen(fun2).andThen(fun3).apply(str); } public static void main(String[] args) { String str = convert("迪麗熱巴,23",(s)->{ return s.split(",")[1]; },(s)->{ return Integer.parseInt(s) + 100; },(s)->{ return String.valueOf(s); }); System.out.println(str); }}
Java之函數式介面