如何实现ExampleMatcher,使用containinig从类中随机选择一个属性,而忽略其他属性?

假设我的班级是这样的:

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(..)如何避免这种情况?

最佳答案

尝试这个:

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


使用ExampleMatcher.matching()ExampleMatcher.matchingAll()可以对示例教师t中的所有非空字段进行比较,因此只需命名(假设来自“ Peter”)即可。

注意:使用原始值,您只需要将它们添加到withIgnorePaths(..)或将它们更改为类似int -> Integer的装箱类型,就没有其他简单的解决方法。

如果只需要按int area搜索,则不设置名称,而是
 在您的示例t

t.setArea(55);


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

t.setCreated(someDate);


您甚至可以将它们全部设置为通过全部应用来缩小搜索范围。

来自the docs


  静态ExampleMatcher matching()
  (&静态ExampleMatcher matchingAll())
  
  默认情况下,创建一个包括所有非空属性的新ExampleMatcher,以匹配从该示例派生的所有谓词。

09-16 11:49