我是java8的新手。我只想知道,这是编写java 8的正确方法,并建议是否可以在java8函数式编程方面进一步改进给定的代码?
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);
}发布于 2018-12-09 09:36:24
您的方法是完全好的,并将是好的继续进行。
如果要进一步减少代码,可以创建一个函数,如下所示,用于加法、减法和乘法。
public int apply(int a, int b, IntBinaryOperator func) {
return func.applyAsInt(a, b);
}但是,您需要为除法功能创建一个单独的函数,以便在第二个参数为IllegalArgumentException的情况下抛出0异常。
注意,我使用了IntBinaryOperator函数接口来避免创建Operation接口,但是如果后者更有意义,那么您可以保留它。
或者,您可以内联地定义函数,然后调用它们:
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));https://stackoverflow.com/questions/53690980
复制相似问题