一、Function 介面概述
Java8 在 java.util.function 包中新增了一些函數式介面,其中一個是 Function 介面。Function 介面代表一個參數輸入一個結果的函數。它接收一個泛型 T 的參數,同時返回一個泛型 R 的結果。其中通過 apply() 方法去執行函數式操作,通過 compose()、andThen() 等方法可以使得多個 Function 組合成一個更複雜的運算。
public interface Function {
R apply(T t);
default Function compose(Function before) {
Objects.requireNonNull(before);
return (V v) -> apply(before.apply(v));
}
default Function andThen(Function after) {
Objects.requireNonNull(after);
return (T t) -> after.apply(apply(t));
}
static Function identity() {
return t -> t;
}
}
二、Function 使用示例
1. Function 的基本使用
實現 Function 介面,重寫 apply() 方法,並在方法中完成具體的功能,如下所示:
Function strLength = str -> str.length(); //定義一個Function對象
int length = strLength.apply("Hello World!"); //將Hello World字元串作為參數,執行strLength的apply()方法
System.out.println("字元串長度為:" + length); //輸出結果:字元串長度為:12
2. Function 的組合運算
除了單獨使用 Function,我們還可以通過 compose()、andThen() 等方法將不同的 Function 組合成一個更複雜的運算,如下所示:
Function replaceA = str -> str.replace("a", "A"); //將所有的小寫a替換為大寫A的Function
Function replaceB = str -> str.replace("b", "B"); //將所有的小寫b替換為大寫B的Function
Function replaceAAndB = replaceA.compose(replaceB); //將replaceA和replaceB組合
String result = replaceAAndB.apply("abcdbae"); //執行組合後的Function
System.out.println("字元串替換後為:" + result); //輸出結果:字元串替換後為: ABCDBAE
3. Function 的鏈式組合
在 Function 的鏈式組合中,使用 andThen() 來將不同的 Function 加入到鏈中,執行順序是從左到右,如下所示:
Function addOne = d -> d + 1; //加一操作
Function multiplyByTwo = d -> d * 2; //乘二操作
Function chain = addOne.andThen(multiplyByTwo); //加一乘二鏈式操作
Double result = chain.apply(1.0); //將1.0作為初始值,執行鏈中的操作
System.out.println("鏈式操作後的結果是:" + result); //輸出結果:鏈式操作後的結果是:4.0
三、Function 中其他方法的使用
1. and(), or() 方法
除了 compose()、andThen() 方法,Function 還具有 and()、or() 方法,分別代表函數式的邏輯與和邏輯或操作。
Function isEven = n -> n % 2 == 0; //判斷是否是偶數
Function isPositive = n -> n > 0; //判斷是否是正數
Function condition = isEven.and(isPositive); //同時滿足以上兩個條件
boolean result = condition.apply(10); //10為偶數且為正數,返回true
Function condition2 = isEven.or(isPositive); //同時滿足以上兩個條件之一
boolean result2 = condition2.apply(-1); //-1為負數,返回false
System.out.println("條件 and 的結果為:" + result); //輸出結果:條件 and 的結果為:true
System.out.println("條件 or 的結果為:" + result2); //輸出結果:條件 or 的結果為:true
2. identity() 方法
identity() 方法是 Function 介面中自帶的一個靜態方法,它返回一個與參數相等的 Function 對象。通過這個方法也能夠更方便地將一個 Function 作為參數來傳遞或返回。
Function function = Function.identity();
String result = function.apply("Hello World!");
System.out.println(result); //輸出結果:Hello World!
四、總結
本文針對 Java8 中 Function 介面進行了全面的解析,包括其概述、使用示例以及相關方法的介紹和使用。Function 介面是 Java8 中函數式編程的基礎,掌握 Function 介面的使用將會在函數式編程中帶來很大的便利,也將幫助程序員更好地理解函數式編程的思想。
原創文章,作者:TFJQV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370433.html