Function.identity()
возвращает Function
, который принимает один аргумент и возвращает этот аргумент.
A BiFunction
имеет два аргумента, поэтому какой из них identity()
вернет?
Аналогично, compose()
используется для составления двух Function
s, передавая результат первого Function
в качестве единственного аргумента, ожидаемого вторым Function
.
Как бы вы реализовали нечто подобное для функции, которая принимает два аргумента? Первая функция приведет к одному значению, но вторая функция требует двух аргументов.
Вы все еще можете составить BiFunction
с Function
, передав результат BiFunction
в качестве аргумента для Function
. Для этого у вас есть и затем .
Например, предположим, что у вас есть BiFunction<Integer,Integer,Integer>
следующим образом:
BiFunction<Integer,Integer,Integer> mul = (x,y) -> x*y;
и у вас есть Function<Integer,Integer>
:
Function<Integer,Integer> plus5 = x -> x + 5;
Вы можете составить их с помощью andThen
следующим образом:
BiFunction<Integer,Integer,Integer> mulPlus5 = mul.andThen(plus5);
и назовите его:
int result = mulPlus5.apply(2,3); // this will multiply 2*3 and add 5, resulting in 11.
Вы не можете сначала применить plus5
(или некоторый BiFunction
в качестве альтернативы), а затем передать его результат mul
, поскольку mul
принимает 2 аргумента при применении plus5
(или любого другого Function
или BiFunction
) приведет к одному значению.