Фильтр BeanUtils Устанавливается на основе свойств объекта и сравнения значений - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть набор объектов, точный тип которых я не знаю заранее. Предположим, что в наборе есть 4 объекта A, B, C и D.

class A{
    id = "test";
    order = "ship";
    getId();
    getOrder();
},
class B {
    id = "fail";
    order = "ship";
    getId();
    getOrder();
},class C {
    id = "fail";
    order = "ship";
    getId();
    getOrder();
},class D {
    id = "test";
    order = "ship";
    getId();
    getOrder();
},

У меня есть массив объектов Property, где Property выглядит следующим образом:

class Property {
    propName : "id"; //Will never be null.
    propValueMatch : "test"; 
},
class Property {
    propName : "order"; //Will never be null.
    propValueMatch : null; 
}

I нужно перебрать набор, применить массив свойств logi c к каждому объекту в наборе и вернуть соответствующий объект. Это будет go примерно так:

Check if the Object in Set has a readable property by the name : Property.propName. If TRUE { 
if Property.propValueMatch is not null : Check if that property value of the Object has the same value as defined in Property.propValueMatch. Then the object passess the criteria and should be returned.
if Property.propValueMatch is null : Then the object passess the criteria and should be returned
}

Одна загвоздка в том, что свойство может существовать в переменной объекта внутри объекта, по которому мы перебираемся.

Я начал это реализовывать, но я я уверен, что для этого есть более чистый способ использования BeanUtils, PropertyUtils, Comaparator et c.

1 Ответ

0 голосов
/ 23 апреля 2020

Завершено использованием apache Commons Predicate для создания критериев для фильтрации набора и затем BeanWrapper для заполнения моих указанных c полей

...