java 8 Stream 新特性 -对对象List数组存在相同数据去重

工作中遇到一个场景短信发送的聚合场景,需要对一个企业多个账号进行短信推送,但是如果短信接受人是同一个人,那么只发一条短信即可,需要处理集合中对象存在多个相同属性聚合去重的操作,使用java8 Stream 流处理;由于使用频率不高,特此记录一下

java实例对象 

/**
 * @Title: UserDao
 * @Description:
 * @Auther:
 * @Version: 1.0
 * @create 2022/6/16 10:42
 */
public class UserDao {
    private String id ;
    private String name;
    private String age ;
    private String salary;

    public UserDao(){
        super();
    }
    public UserDao (String id,String name,String age,String salary){
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSalary() {
        return salary;
    }

    public void setSalary(String salary) {
        this.salary = salary;
    }

    @Override
    public String toString(){
        return id+"-"+name+"-"+age+"-"+salary;
    }
}

流处理筛选逻辑

/**
 * @Title: TestStream
 * @Description:
 * @Auther:
 * @Version: 1.0
 * @create 2022/6/16 10:40
 */
public class TestStream {

    @Test
    public void distinctTest(){
        List<UserDao> list = new ArrayList<>();
        list.add(new UserDao("1","张三","24","3800"));
        list.add(new UserDao("2","张三","25","3800"));
        list.add(new UserDao("3","李四","25","3800"));
        list.add(new UserDao("4","李四","24","3800"));
        list.add(new UserDao("5","王五","24","3800"));
        list.add(new UserDao("6","王五","24","3800"));
        //单个字段去重
        List<UserDao> distinctList1 = list.stream()
                .collect(Collectors
                        .collectingAndThen(Collectors
                                .toCollection(() -> new TreeSet<>(Comparator.comparing(UserDao :: getName))), ArrayList :: new));

        System.out.println(distinctList1.toString());
        //多个字段去重
        List<UserDao> distinctList2 = list.stream()
                .collect(Collectors
                        .collectingAndThen(Collectors
                                .toCollection(() -> new TreeSet<>(Comparator.comparing(x -> x.getAge() + x.getSalary()))), ArrayList :: new));

        System.out.println(distinctList2.toString());

    }
}

最终打印结果:

 com.example.springbootdemo.TestStream,distinctTest
[1-张三-24-3800, 3-李四-25-3800, 5-王五-24-3800]
[1-张三-24-3800, 2-张三-25-3800]

Process finished with exit code 0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值