特質
函數,接收一個或多個參數,返回指定類型結果
測試
測試數據
@Data
public static class Foo {
String strVal = "Hello";
int intVal = 1;
Double doubleVal = 2.0;
Long longVal = 3L;
Boolean trueVal = true;
String strTmp;
int intTmp = 1;
Double doubleTmp;
Long longTmp;
}
萬能型Function
可以指定輸入和輸出類型。
Function<Integer, String> function = (intV) -> intV + "";
assertEquals("1", function.apply(foo.intVal));
固定輸入類型Function
不需要指定輸入類型,只需要指定輸出類型。
DoubleFunction<String> doubleFunction = (d1) -> d1 + "!";
assertEquals("123.0!", doubleFunction.apply(123.0));
IntFunction<String> intFunction = (d1) -> d1 + "!";
assertEquals(foo.intVal + "!", intFunction.apply(foo.intVal));
LongFunction<String> longFunction = (d1) -> d1 + "!";
assertEquals(foo.longVal + "!", longFunction.apply(foo.longVal));
類型轉換類型Function
只聲明輸出結果
輸入類型需要指定。
ToDoubleFunction<Foo> toDoubleFunction = (f1) -> f1.doubleVal;
assertEquals(foo.doubleVal, foo.doubleVal, toDoubleFunction.applyAsDouble(foo));
ToIntFunction<Foo> toIntFunction = (f1) -> f1.intVal;
assertEquals(foo.intVal, toIntFunction.applyAsInt(foo));
ToLongFunction<Foo> toLongFunction = (f1) -> f1.longVal;
assertEquals(foo.longVal.longValue(), toLongFunction.applyAsLong(foo));
輸入輸出均已指定
無需指定輸入輸出類型。
DoubleToIntFunction doubleToIntFunction = (d1) -> foo.intVal;
assertEquals(foo.intVal, doubleToIntFunction.applyAsInt(99.0));
DoubleToLongFunction doubleToLongFunction = (d1) -> foo.longVal;
assertEquals(foo.longVal.longValue(), doubleToLongFunction.applyAsLong(1.2));
IntToDoubleFunction intToDoubleFunction = (d1) -> foo.doubleVal;
assertEquals( foo.doubleVal, foo.doubleVal, intToDoubleFunction.applyAsDouble(1));
IntToLongFunction intToLongFunction = (d1) -> foo.longVal;
assertEquals(foo.longVal.longValue(), intToLongFunction.applyAsLong(1));
LongToDoubleFunction longToDoubleFunction = (d1) -> foo.doubleVal;
assertEquals(foo.doubleVal, foo.doubleVal, longToDoubleFunction.applyAsDouble(1));
LongToIntFunction longToIntFunction = (d1) -> foo.intVal;
assertEquals(foo.intVal, longToIntFunction.applyAsInt(1));
萬能型BiFunction
可以指定輸入,輸出類型,可以進行運行返回數據結果。
BiFunction<String, Integer, String> biFunction = (s1, s2) -> s1 + s2;
assertEquals("Hello123", biFunction.apply("Hello", 123));
固定輸出類型BiFunction
只需要定義輸入的參數,輸出類型固定。
ToDoubleBiFunction<Foo, Foo> doubleBiFunction = (f1, f2) -> f1.doubleVal + f2.doubleVal;
assertEquals(foo.doubleVal *2, foo.doubleVal *2, doubleBiFunction.applyAsDouble(foo, foo));
ToIntBiFunction<Foo, Foo> intBiFunction = (f1, f2) -> f1.intVal + f2.intVal;
assertEquals(foo.intVal *2, foo.intVal *2, intBiFunction.applyAsInt(foo, foo));
ToLongBiFunction<Foo, Foo> longBiFunction = (f1, f2) -> f1.longVal + f2.longVal;
assertEquals(foo.longVal *2, foo.longVal *2, longBiFunction.applyAsLong(foo, foo));