优点使用BiFunction Java 8

时间:2017-05-09 15:17:59

标签: java functional-programming

我理解BiFunction的合约,其函数方法为apply(T t,U u),它接受两个参数。 但事实是,我不明白使用它的好处。 你能帮帮我吗?

3 个答案:

答案 0 :(得分:12)

这个问题的问题在于,您是否看到Function的目的尚不清楚,apply(T t)的方法是ui.onClick(new ClickHandler() { public void handleAction(Action action) { // do something in response to a click, using `action`. } }

所有功能类型的值是您可以像数据一样传递代码。一个常见的用途是回调,直到Java 8,我们以前必须使用匿名类声明来执行此操作:

ui.onClick( action -> { /* do something with action */ });

现在有了lambdas,我们可以更加简洁地做到这一点:

Consumer clickHandler = action -> { /* do something with action */ };
ui.onClick(clickHandler);

我们也可以将它们分配给变量:

Map<String,Consumer> handlers = new HashMap<>();
handlers.put("click", handleAction);

...并执行我们对象所做的常规操作,例如将它们放入集合中:

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)); 做一些有用的事情:

Appium

答案 1 :(得分:2)

BiFunction方法中使用Map.merge的一种用法。

以下是Map.merge方法的示例用法,该方法使用BiFunction作为参数。如果值为null或键没有值,merge的作用基本上是用给定值替换给定键的值。否则,在应用BiFunction后替换给定密钥的值。

HashMap<String, String> map = new HashMap<>();
map.put("1", null);
map.put("2", "Hello");
map.merge("1", "Hi", String::concat);
map.merge("2", "Hi", String::concat);
System.out.println(map.get("1")); // Hi
System.out.println(map.get("2")); // HelloHi

如果未使用BiFunction,则必须编写更多代码,甚至跨越多行。

以下链接显示了JDK中BiFunction的所有用法:https://docs.oracle.com/javase/8/docs/api/java/util/function/class-use/BiFunction.html

去看看吧!

答案 2 :(得分:0)

BiFunction 的一个额外示例是 reduce()

public static void main(String[] args) {

        List<Integer> list = new ArrayList<>(Arrays.asList(5,5,10));

        Integer reduce = list.stream().reduce(0, (v1,v2) -> v1+v2);
        System.out.println(reduce); // result is: 20

}