Java unil BiFunction

时间:2016-01-28 16:56:56

标签: java java-8 method-reference

我对在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 个答案:

答案 0 :(得分:9)

看起来你想要一个像

这样的功能
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);

答案 1 :(得分:0)

我不太确定你对#34;方法参考&#34;的意思,但我认为你想要这样的东西:

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。