Lambda之Function

特質

函數,接收一個或多個參數,返回指定類型結果

測試

測試數據

@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));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章