首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >还能进一步改进吗?

还能进一步改进吗?
EN

Stack Overflow用户
提问于 2018-12-09 09:33:10
回答 1查看 66关注 0票数 1

我是java8的新手。我只想知道,这是编写java 8的正确方法,并建议是否可以在java8函数式编程方面进一步改进给定的代码?

代码语言:javascript
复制
public class OperationByJava8 {
    public int add(int a, int b) {
        Operation op = (num1, num2) -> num1 + num2;
        return op.operate(a, b);
    }

    public int subtract(int a, int b) {
        Operation op = (num1, num2) -> num1 - num2;
        return op.operate(a, b);
    }

    public int multiply(int a, int b) {
        Operation op = (num1, num2) -> num1 * num2;
        return op.operate(a, b);
    }

    public int devide(int a, int b) {
        Operation op = (num1, num2) -> {
            if (num2 == 0) {
                throw new IllegalArgumentException("denominator cannot be zero");
            }
            return num1 / num2;
        };
        return op.operate(a, b);
    }

    public static void main(String[] args) {
        OperationByJava9 op = new OperationByJava9();
        System.out.println("    Addition(12, 12)    :" + op.add(12, 12));
        System.out.println("    Subtract(12, 12)    :" + op.subtract(12, 12));
        System.out.println("    Multiply(12, 12)    :" + op.multiply(12, 12));
        System.out.println("    Devide  (12, 12)    :" + op.devide(12, 12));
    }

}

@FunctionalInterface
interface Operation {
    int operate(int a, int b);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-09 09:36:24

您的方法是完全好的,并将是好的继续进行。

如果要进一步减少代码,可以创建一个函数,如下所示,用于加法、减法和乘法。

代码语言:javascript
复制
public int apply(int a, int b, IntBinaryOperator func) {            
      return func.applyAsInt(a, b);
}

但是,您需要为除法功能创建一个单独的函数,以便在第二个参数为IllegalArgumentException的情况下抛出0异常。

注意,我使用了IntBinaryOperator函数接口来避免创建Operation接口,但是如果后者更有意义,那么您可以保留它。

或者,您可以内联地定义函数,然后调用它们:

代码语言:javascript
复制
IntBinaryOperator add = (num1, num2) -> num1 + num2;
IntBinaryOperator subtract = (num1, num2) -> num1 + num2;
IntBinaryOperator multiply = (num1, num2) -> num1 + num2;
IntBinaryOperator division = (num1, num2) ->  {
        if (num2 == 0)
            throw new IllegalArgumentException("denominator cannot be zero");
        return num1 / num2;
};


System.out.println("    Addition(12, 12)    :" + add.applyAsInt(12, 12));
System.out.println("    Subtract(12, 12)    :" + subtract.applyAsInt(12, 12));
System.out.println("    Multiply(12, 12)    :" + multiply.applyAsInt(12, 12));
System.out.println("    Devide  (12, 12)    :" + division.applyAsInt(12, 12));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53690980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档