需求:一个对象List集合需要根据对象的指定属性进行去重,排除重复的数据
工具类代码:
public class CollectionUtils {
/**
* 根据集合属性去重
* @param keyExtractor
* @param <T>
* @return
*/
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
}
实体类对象:
public class DhMediaAnalysis {
//作者
private String irAuthors;
private String title;
//发布时间
private Date irUrltime;
}
测试方法:
public static void main(String[] args) {
List<DhMediaAnalysis> mediaAnalyses = new ArrayList<>();
DhMediaAnalysis dhMediaAnalysis1 = new DhMediaAnalysis();
dhMediaAnalysis1.setTitle("#来电时刻#日光灯vs白炽灯vsLED灯,哪种更省电呢?#粤低碳粤环保#网页链接");
DhMediaAnalysis dhMediaAnalysis2 = new DhMediaAnalysis();
dhMediaAnalysis2.setTitle("#来电时刻#日光灯vs白炽灯vsLED灯,哪种更省电呢?#粤低碳粤环保#网页链接");
dhMediaAnalyses.add(dhMediaAnalysis1);
dhMediaAnalyses.add(dhMediaAnalysis2);
List<DhMediaAnalysis> newBos = dhMediaAnalyses.stream().filter(CollectionUtils.distinctByKey(DhMediaAnalysis::getTitle)).collect(Collectors.toList());
System.out.println(newBos .size());
}
注意:使用该方法当指定对象的属性为null的情况,会报错,避免出现报错问题,可先行对属性值进行空值判断!