java 如何使ExampleMatcher只匹配一个属性?

tkclm6bt  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(257)

如何实现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(..)如何避免?

7qhs6swi

7qhs6swi1#

试试这个:

Teacher t = new Teacher("Peter");
Example<Teacher> te = Example.of(t,
    ExampleMatcher.matching()
        .withStringMatcher(StringMatcher.CONTAINING)
        .withIgnoreCase());

使用ExampleMatcher.matching()ExampleMatcher.matchingAll()时,将与示例teacher t中的所有非空字段进行比较,因此只需名称(假定来自“Peter”)。

注意:对于基元值,您只需要将它们添加到withIgnorePaths(..)或将它们更改为装箱类型(如int -> Integer),没有其他简单的解决方法。

如果只需要按int area搜索,则不设置名称,但在示例中为t

t.setArea(55);

或者,如果您有Date created,则按创建的搜索:

t.setCreated(someDate);

你甚至可以设置它们来缩小搜索范围。
从文件上看
静态ExampleMatcher匹配()
(静态示例匹配器匹配全部()(& S))
创建一个新的ExampleMatcher,默认情况下包括所有非空属性,匹配从示例派生的所有 predicate 。

相关问题