主要通過反射獲取指定對象屬性,然後利用set集合,對指定屬性的值進行比較,結果相等則代表重複,代碼如下:
package cn.sinobest.sdg.util;
import java.lang.reflect.Field;
import java.util.*;
/**
* @description 集合工具類
* @author: dengweiping
* @time: 2020/6/1 14:49
*/
public class ListUtil {
/**
* 根據指定對象屬性去除重複對象
*
* @param list 傳入的list集合
* @param propertyName 指定的去重屬性名稱
*/
public static <T> List<T> removeRepeat(List<T> list, String propertyName) {
if (list == null || list.isEmpty()) {
return null;
}
//根據屬性值進行去重
Set<T> sets = new TreeSet<>((o1, o2) -> {
try {
Field field1 = o1.getClass().getDeclaredField(propertyName);
Field field2 = o2.getClass().getDeclaredField(propertyName);
field1.setAccessible(true);
field2.setAccessible(true);
Object obj1 = field1.get(o1);
Object obj2 = field2.get(o2);
//根據指定屬性進行去重
return obj1.toString().compareTo(obj2.toString());
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return 0;
});
sets.addAll(list);
return new ArrayList(sets);
}
/**
* 根據指定key去除重複Map
*
* @param list 傳入的list集合
* @param keyName 指定的key
*/
public static List<Map<String, Object>> removeMapRepeat(List<Map<String, Object>> list, String keyName) {
if (list == null || list.isEmpty()) {
return null;
}
//根據屬性值進行去重
Set<Map<String, Object>> sets = new TreeSet<>((m1, m2) -> {
Object obj1 = m1.get(keyName);
Object obj2 = m2.get(keyName);
//根據指定的key進行去重
return obj1.toString().compareTo(obj2.toString());
});
sets.addAll(list);
return new ArrayList(sets);
}
}
更多工具類可以查看我的博客:Java字符串、集合等工具類合集
項目源碼地址:全球同性交友網站