Java unil BiFunction 中的方法参考
Method reference in 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);
可能吗?我想不出正确的语法,如何实现这样的功能。
我不太清楚你说 "method reference" 是什么意思,但我想你想要这样的东西:
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。
看起来你想要一个像
这样的函数
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);
我对在 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);
可能吗?我想不出正确的语法,如何实现这样的功能。
我不太清楚你说 "method reference" 是什么意思,但我想你想要这样的东西:
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。
看起来你想要一个像
这样的函数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);