java8实现List中对象属性的去重
2023-12-22 07:01:06
java8的stream流能完美解对象集合去重问题.
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserCar {
private Integer id;
private String carNo;
public static void main(String[] args) {
List<UserCar> cars = new ArrayList<>();
cars.add(UserCar.builder().id(1).carNo("AA").build());
cars.add(UserCar.builder().id(2).carNo("AA").build());
cars.add(UserCar.builder().id(2).carNo("AA").build());
cars.add(UserCar.builder().id(3).carNo("AB").build());
List<UserCar> carList = removeDuplicates4(cars);
System.out.println(JSONObject.toJSONString(carList));
}
}
12345678910111213141516171819
- 第一种: 不使用java8
private static List<UserCar> removeDuplicates(List<UserCar> userCars) {
Set<UserCar> personSet = new TreeSet<UserCar>(Comparator.comparing(UserCar::getCarNo));
personSet.addAll(userCars);
return new ArrayList<UserCar>(personSet);
}
1234567
这也是大多数人第一想到的,借助 TreeSet 去重,其中 TreeSet 的其中一个构造函数接收一个排序的算法,同时这也会用到 TreeSet 的去重策略上.
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
12345
- 第二种: 炫酷的java8写法
private static List<UserCar> removeDuplicates2(List<UserCar> cars) {
return cars.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<UserCar>(Comparator.comparing(UserCar::getCarNo))), ArrayList::new)
);
}
12345
- 第三种: 基于java8 过滤器实现
private static List<UserCar> removeDuplicates3(List<UserCar> cars) {
// 用于临时存放id
List<String> filterCars = new ArrayList<>();
return cars.stream().filter(
e -> {
boolean found = !filterCars.contains(e.getCarNo());
filterCars.add(e.getCarNo());
return found;
}
).collect(Collectors.toList());
}
12345678910111213
- 第四种: 基于hutool实现
/**
* 使用hutool工具类
* @param cars
* @return
*/
private static List<UserCar> removeDuplicates5(List<UserCar> cars) {
return CollUtil.distinct(cars, UserCar::getCarNo, true);
}
123456789
文章来源:https://blog.csdn.net/qq_43985303/article/details/135125090
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!