Как сделать ExampleMatcher, содержащий только одно свойство?
Как реализовать ExampleMatcher, в котором содержится только одно случайное свойство из моего класса, и игнорировать другие свойства?
Предположим, мой класс, как это:
Public Class Teacher() {
String id;
String name;
String address;
String phone;
int area;
..other properties is here...
}
Если я хочу сопоставить по имени:
Teacher TeacherExample = new Teacher("Peter");
ExampleMatcher matcher = ExampleMatcher.matchingAny()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
.withIgnoreCase()
.withIgnorePaths("id", "address", "phone","area",...); //no name
и если я хочу сопоставить по адресу:
ExampleMatcher matcher = ExampleMatcher.matchingAny()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
.withIgnoreCase()
.withIgnorePaths("id", "name", "phone","area",...); //no address
поэтому мне нужно повторить withIgnorePaths(..)
Как этого избежать?
1 ответ
Попробуй это:
Teacher t = new Teacher("Peter");
Example<Teacher> te = Example.of(t,
ExampleMatcher.matching()
.withStringMatcher(StringMatcher.CONTAINING)
.withIgnoreCase());
С ExampleMatcher.matching()
или же ExampleMatcher.matchingAll()
сравнение выполняется со всеми ненулевыми полями в вашем примере учителя t
так просто название (предполагается от "Питер").
ПРИМЕЧАНИЕ: с примитивными значениями вам просто нужно добавить их в withIgnorePaths(..)
или измените их на коробочные типы, такие как int -> Integer
Других простых обходных путей нет.
Если вам нужно искать только int area
не задавайте имени, но в вашем примере t
t.setArea(55);
или если бы вы имели Date created
, поиск по созданным:
t.setCreated(someDate);
Вы даже можете установить их все, чтобы сузить поиск, применяя их все.
Из документов
static ExampleMatcher Matching ()
(& static ExampleMatcher MatchAll())Создайте новый ExampleMatcher, включающий все ненулевые свойства по умолчанию, соответствующие всем предикатам, полученным из примера.