在针对特定场景下,将获取到的list<T> 集合 按照某一个特定的对象中的属性进行去重操作,以下代码会将传入的集合进行指定去重,会将指定属性重复的对象 只保留第一个,后续的重复则不会保存到去重后的集合中,当然我们也可以通过集合的差异获取出重复的对象以及后续的再将去重后的集合中的再次进行比对去除操作.
Stu 对象
public String name;
public String age;
public String hobby;
创建对象和集合
Stu stu1 = new Stu("AAA", "18", "唱");
Stu stu2 = new Stu("AAA", "19", "跳");
Stu stu3 = new Stu("222", "18", "rap");
Stu stu4 = new Stu("333", "20", null);
List<Stu> list = new ArrayList<>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
去重代码
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
List<Stu> collect = list.stream().filter(distinctByKey(Stu::getName)).collect(Collectors.toList());
for (Stu s:collect
) {
System.out.println(s);
}
运行结果