我的Java程序中有以下代码(由实际程序改写而成):
import java.util.Objects;
import java.util.function.BiPredicate;
class Class1 {
String propertyA;
boolean propertyANot;
String propertyB; //Not all members have corresponding negate indicator
String propertyC;
String propertyD;
boolean propertyDNot;
....
}
class Class2 {
String propertyX;
String propertyY;
String propertyZ;
String propertyW;
....
}
public class Main {
//Fail early without inspecting all properties
private BiPredicate<Class1,Class2> matchObjects = (obj1,obj2) -> {
if(obj1.propertyA != null && obj2.propertyX != null) {
//property1Not is a boolean indicates negation
if(obj1.propertyANot && !Objects.equals(obj1.propertyA,obj2.propertyX)) {
return false;
}
else if(!obj1.propertyANot && Objects.equals(obj1.propertyA,obj2.propertyX)) {
return false;
}
}
if(obj1.propertyB != null && obj2.propertyY != null) {
if(!Objects.equals(obj1.propertyB,obj2.propertyY)) {
return false;
}
}
....
return true;
};
}
如注释中所示,我希望matchObjects方法在匹配条件之一失败时就失败。同样,输入对象也没有一对一的对应关系来概括循环中的代码。
我有以下问题:
使用函数式编程重写此代码的最佳方法是什么 java8的概念?
如果条件使我觉得这里有太多需要改进的空间,那就太多了。
我还编写了一个自定义谓词,该谓词采用多个&Optional
参数来概括在if
条件下对属性等效性的测试。
但是,这并不能帮助我摆脱多个if
条件。
请提前帮助和感谢。
答案 0 :(得分:3)
您可以尝试以下操作:
position