如何实现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,以匹配从该示例派生的所有谓词。