java8实现List中对象属性的去重

本文介绍了四种在Java中去除对象集合重复元素的方法,包括使用TreeSet、Java8 Stream流、过滤器和Hutool库。通过示例展示了如何基于`UserCar`类的`carNo`属性进行去重,提供了简洁高效的代码实现。
摘要由CSDN通过智能技术生成
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));
    }
}    
  • 第一种: 不使用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);
    }		
    

这也是大多数人第一想到的,借助 TreeSet 去重,其中 TreeSet 的其中一个构造函数接收一个排序的算法,同时这也会用到 TreeSet 的去重策略上.

public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }
  • 第二种: 炫酷的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)
        );
    }
    
  • 第三种: 基于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());
    }
    
  • 第四种: 基于hutool实现

    /**
     * 使用hutool工具类
     * @param cars
     * @return
     */
    private static List<UserCar> removeDuplicates5(List<UserCar> cars) {
        return CollUtil.distinct(cars, UserCar::getCarNo, true);
    }
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bluepad

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值