优点使用BiFunction Java 8

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)