/**
* 多属性去重 结果会按照传入属性先后,依次按属性取值排序
*
* @param list
* @param clazz
* @param fileds
* @return
*/
public static List<?> getDistinctListByObFileds(List<?> list, Class clazz, String... fileds) {
if (fileds.length <= 0) {
return list;
}
Method[] mds = new Method[fileds.length];
for (int i = 0; i < fileds.length; i++) {
try {
mds[i] = clazz.getMethod(fileds[i]);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
List<?> collect = list.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> {
StringBuilder sb = new StringBuilder();
try {
for (Method m : mds) {
Object invoke1 = m.invoke(o);
sb.append(invoke1);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return sb.toString();
}))), ArrayList::new
)
);
return (List<?>) collect;
}
List<User> getName = (List<User>) ListUtils.getDistinctListByObFileds(ulist, User.class, "getName", "getSex");
List8流表达式、反射多字段属性去重
最新推荐文章于 2023-08-04 10:09:03 发布