如何将lambda表达式赋给变量?

Joã*_*ria 0 java if-statement java-8

我有一种计算器:

sum = value1 + value2;
    multiplication = value1 * value2;
    division = (value1 / value2);
    average = (sum / 2);

    if (operation.compareToIgnoreCase("add") == 0)
        result = sum;
    else if (operation.compareToIgnoreCase("mult") == 0)
        result = multiplication;
    else if (operation.compareToIgnoreCase("div") == 0)
        result = division;
    else if (operation.compareToIgnoreCase("avg") == 0)
        result = average;
Run Code Online (Sandbox Code Playgroud)

我必须将其转换为lambda表达式:

result = (request.getValue1(), request.getValue2()) -> {
        if (request.getOperation().compareToIgnoreCase("add") == 0) return request.getValue1() + request.getValue2();
        else if (request.getOperation().compareToIgnoreCase("mult") == 0) return request.getValue1() * request.getValue2();
        else if (request.getOperation().compareToIgnoreCase("div") == 0) return request.getValue1() / request.getValue2();
        else if (request.getOperation().compareToIgnoreCase("avg") == 0) return (request.getValue1() + request.getValue2())/2;
    }
Run Code Online (Sandbox Code Playgroud)

但它不起作用.你们能帮忙吗?谢谢

Lor*_*ore 7

例如:

BiFunction<Number,Number,Number> sum = (value1, value2) -> value1 + value2;
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它:

sum.apply(value1,value2)
Run Code Online (Sandbox Code Playgroud)

这里有更多例子.

您还可以将您的一组存储BiFunction在Map:

Map<String,BiFunction<Number, Number, Number>> operations = new HashMap<>();
operations.put("sum", sum);
Run Code Online (Sandbox Code Playgroud)

如果对所有操作执行相同操作,则按以下方式调用它们:

operations.get("sum").apply(value1, value2);
Run Code Online (Sandbox Code Playgroud)

因此,结果可以按如下方式计算:

result = (value1, value2, operation) -> operations.get(operation).apply(value1, value2);
Run Code Online (Sandbox Code Playgroud)

  • 更清洁的是为此定义一个枚举 (4认同)