今天工作需要写了一个模糊匹配List的工具类,根据模糊字段返回符合条件的对象集合,有需要的朋友可以参考一下。代码如下:
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @AUTHOR clemert
* @DATE 2019/9/4 14:13
*/
public class GetTargetList {
public static<T> List<T> getList(List<T> list, String like) {
ArrayList<T> results = new ArrayList<>();
list.forEach(obj -> {
StringBuilder sb = new StringBuilder();
Field[] fields = obj.getClass().getDeclaredFields();
//设置大小写不敏感 加Pattern.CASE_INSENSITIVE
Pattern pattern = Pattern.compile(like,Pattern.CASE_INSENSITIVE);
for (int i = 0, len = fields.length; i < len; i++) {
try {
// 获取原来的访问控制权限
boolean accessFlag = fields[i].isAccessible();
// 修改访问控制权限
fields[i].setAccessible(true);
// 获取在对象f中属性fields[i]对应的对象中的变量
Object o;
try {
o = fields[i].get(obj);
//字段是null跳过
if (o==null) {
continue;
}
String s = o.toString();
//根据需要排除部分属性值
if ("truefalse".contains(s)) {
continue;
}
//拼接对象中的值
sb.append(s);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// 恢复访问控制权限
fields[i].setAccessible(accessFlag);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
}
Matcher matcher = pattern.matcher(sb);
//模糊匹配 可根据需求调整匹配规则
if (matcher.find()) {
results.add(obj);
}
});
return results;
}
}
参数List list 是要操作的list。
参数 String like 是匹配字段。