在Java8中你會發現java.util.function包下的Function, Supplier, Consumer, Predicate和其他函數式接口廣泛用在支持lambda表達式的API中。這些接口有一個抽象方法,會被lambda表達式的定義所覆蓋。
這裏簡單介紹一下Function接口:
接口的主要方法:
R apply(T t)
將Function對象應用到輸入的參數上,然後返回計算結果。default ‹V› Function‹T,V›
將兩個Function整合,並返回一個能夠執行兩個Function對象功能的Function對象。
如果你想把接受一些輸入參數並將對輸入參數處理過後的結果返回的功能封裝到一個方法內,Function接口是一個不錯的選擇。
示例如下:
public class FunctionDemo {
//API which accepts an implementation of
//Function interface
//Function接口實現作爲參數
static void modifyTheValue(int valueToBeOperated, Function<Integer, Integer> function){
int newValue = function.apply(valueToBeOperated);
// Do some operations using the new value.
System.out.println(newValue);
}
}
下面是調用上述方法的例子:
public static void main(String[] args) {
int incr = 20;
int myNumber = 10;
modifyTheValue(myNumber, val-> val + incr);
myNumber = 15;
modifyTheValue(myNumber, val-> val * 10);
modifyTheValue(myNumber, val-> val - 100);
modifyTheValue(myNumber, val-> "somestring".length() + val - 100);
}
可以看到,接受1個參數並返回執行結果的lambda表達式創建在例子中。這個例子的輸入如下:
30
150
-85
-75