java8的stream流能完美解对象集合去重问题.
List<UserCar> list1 = new ArrayList();
UserCar userCar = new UserCar();
userCar.setId(1);
userCar.setCarNo("AA");
list1.add(userCar);
UserCar userCar1 = new UserCar();
userCar1.setId(2);
userCar1.setCarNo("AA");
list1.add(userCar1);
Person p1 = new Person(1, "11");
Person p2 = new Person(1, "22");
Person p3 = new Person(2, "11");
List<Person> persons = Arrays.asList(p1, p2, p3);
- 第一种: 不使用java8
private List<UserCar> removeDupliByRecordId(List<UserCar> userCars) {
Set<UserCar> personSet = new TreeSet<UserCar>((o1, o2) -> o1.getRecordId().compareTo(o2.getRecordId()));
personSet.addAll(userCars);
return new ArrayList<UserCar>(personSet);
}
这也是大多数人第一想到的,借助 TreeSet 去重,其中 TreeSet 的其中一个构造函数接收一个排序的算法,同时这也会用到 TreeSet 的去重策略上.
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
- 第二种: 炫酷的java8写法
List<Person> unique = persons.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getName))), ArrayList::new)
);
unique.forEach(p -> System.out.println(p));
- 第三种: 炫酷的java8写法
List<String> names = new ArrayList<>();//用来临时存储person的id
List<Person> personList = persons.stream().filter(// 过滤去重
v -> {
boolean flag = !names.contains(v.getName());
names.add(v.getName());
return flag;
}
).collect(Collectors.toList());
作者:tangerr
原文:https://blog.csdn.net/tangerr/article/details/90349986
版权声明:本文为作者原创文章,转载请附上博文链接!