Почему метод составления и идентификации отсутствует в интерфейсе Bifunction Java 8? - PullRequest
0 голосов
/ 24 мая 2019

Я только начал читать концепции Java 8, когда читал, я нашел что-то, что меня не убедило достаточно, то есть упущение методов compose и identity в интерфейсе BiFunction.Насколько я мог читать из документации по Java 8, я мог видеть, что Bifunction похоже на то, что Function интерфейс ожидает, что он потребует дополнительных аргументов, поэтому в таком случае Bifunction должен иметь все функции, такие как Functionинтерфейс, но это не так.

Следовательно, кто-нибудь может помочь мне найти причину отказа от этих методов?

1 Ответ

6 голосов
/ 24 мая 2019

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) приведет к одному значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...