List 根据实体属性搜索
工具类如下所示,主要使用了泛型,反射
入参:
list,待查找的 list
field: 要根据 list 中的哪个属性来查找 ,如上面的 TestModel 中的 name/value
value: 要查找的值为什么,如"demo", 查找 list 中 name = demo 的那个数据
clazz: 泛型类的描述信息,也就是 TestModel
代码
public static <T> List<T> containsByField(List<T> list ,String field,Object value,Class<T> clazz){
List<T> res = new ArrayList<>();
try {
// 通过反射获取对应的属性
Field dbField = clazz.getDeclaredField(field);
// 设置属性为可访问
dbField.setAccessible(true);
for (T t : list) {
// 遍历list,获取到对应属性的值
Object o = dbField.get(t);
if(value.equals(o)){
// 如值和预期想等的话,则加入到返回值中
res.add(t);
}
}
} catch (NoSuchFieldException e) {
// 如果不存在这个字段,则直接返回空
return res;
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return res;
}
测试
List<TestModel> c = containsByField(list, "name", "demo", TestModel.class);