В моей 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
состояний.
Пожалуйста, помогите и спасибо заранее.