jos*_*era 1 java functional-programming
我理解为BiFunction的合同,其函数方法为apply(T t,U u),它接受两个参数.但事实是,我不明白使用它的优点.你能帮帮我吗?
sli*_*lim 17
这个问题的问题在于,你是否看到a的目的并不清楚Function
,它有一个方法apply(T t)
.
所有函数类型的值是您可以像数据一样传递代码.一个常见的用途是回调,直到Java 8,我们以前必须使用匿名类声明来执行此操作:
ui.onClick(new ClickHandler() {
public void handleAction(Action action) {
// do something in response to a click, using `action`.
}
}
Run Code Online (Sandbox Code Playgroud)
现在有了lambdas,我们可以更加简洁地做到这一点:
ui.onClick( action -> { /* do something with action */ });
Run Code Online (Sandbox Code Playgroud)
我们也可以将它们分配给变量:
Consumer clickHandler = action -> { /* do something with action */ };
ui.onClick(clickHandler);
Run Code Online (Sandbox Code Playgroud)
...并执行我们对对象执行的常规操作,例如将它们放入集合中:
Map<String,Consumer> handlers = new HashMap<>();
handlers.put("click", handleAction);
Run Code Online (Sandbox Code Playgroud)
A BiFunction
就是这个有两个输入参数.让我们用到目前为止看到的东西来做一些有用的事情BiFunctions
:
Map<String,BiFunction<Integer,Integer,Integer>> operators = new HashMap<>();
operators.put("+", (a,b) -> a + b);
operators.put("-", (a,b) -> a - b);
operators.put("*", (a,b) -> a * b);
...
// get a, b, op from ui
ui.output(operators.get(operator).apply(a,b));
Run Code Online (Sandbox Code Playgroud)