Ссылка на метод в Java unil BiFunction

У меня есть вопрос о передаче ссылки на метод в качестве аргумента в функции Java (Util).

У меня две функции

Function<Value, Output> f1 = (val) -> {
    Output o = new Output();
    o.setAAA(val);
    return o;
};

Function<Value, Output> f2 = (val) -> {
    Output o = new Output();
    o.setBBB(val);
    return o;
};

Я хочу объединить их в одну функцию, которая должна выглядеть

BiFunction<MethodRefrence, Value, Output> f3 = (ref, val) -> {
    Output o = new Output();
    Output."use method based on method reference"(val);
    return o;
};

Я хочу использовать эту функцию как

f3.apply(Output::AAA, number);

Является ли это возможным? Я не могу понять правильный синтаксис, как сделать такую ​​функцию.

2 ответа

Решение

Похоже, вы хотите функцию, как

BiFunction<BiConsumer<Output,Value>, Value, Output> f = (func, val) -> {
    Output o = new Output();
    func.accept(o, val);
    return o;
};

который вы можете ссылаться как

f.apply(Output::setAAA, val);
f.apply(Output::setBBB, val);

Я не совсем уверен, что вы имеете в виду под "ссылкой на метод", но я думаю, что вы хотите что-то вроде этого:

BiFunction<Integer, Value, Output> f3 = (ref, val> -> {
    switch(ref) {
        case 1: return f1.apply(value);
        case 2: return f2.apply(value);
        default: throw new IllegalArgumentException("invalid index");
    }
}

Вы можете заменить Integer всем, что захотите, если вы также измените оператор switch, возможно, используйте if/else.

Другие вопросы по тегам