List过滤重复数据

一、背景(着急的同学直接看实现)

产品部门向小王提出了一项需求,要求根据多变的条件灵活组合,从一个对象集合中筛选出符合条件的项目。小王初时考虑通过创建多个定制化的equals方法来逐一对比筛选,正当他准备埋头编码之际,大林子恰巧留意到了他的这一举动。在了解了具体需求后,大林子微笑着提出了建议:"其实,你不必为此大费周章,Java 8引入的Stream API能帮助我们更加高效且优雅地解决这类问题。"

于是,大林子进一步解释道,利用Stream API,小王可以轻松构建一个高度灵活的管道流程,这个流程能够根据需要动态添加各种过滤条件。通过链式调用诸如filter等方法,不仅代码逻辑变得清晰可读,而且大大减少了潜在的错误和冗余,使得整个筛选过程变得异常简洁高效。

二、实现

其实List转Map,也是可以通过Stream API实现,还有许多功能,处理集合的问题。

java 复制代码
@Data
@AllArgsConstructor
public class MyObject {
    String property1;
    String property2;
    String property3;
    String property4;
    String property5;
}

过滤方法

java 复制代码
public class Main {
    public static void main(String[] args) {
        List<MyObject> objects= Arrays.asList(
            new MyObject("Alice", 20, null, null, null),
            new MyObject("Bob", 30, null, null, null),
            new MyObject("Alice", 20, null, null, null), // 这个是重复的
            new MyObject("Charlie", 30, null, null, null)
        );

        List<MyObject> uniqueObject = objects.stream()
            // 使用toMap去重,key为自定义的组合(这里简单用property1+property2作为示例),value为MyObject对象本身
            .collect(Collectors.toMap(
                e -> e.getProperty1() + ":" + e.getProperty2(), // 自定义键生成器,确保根据property1和property2组合成唯一的键
                e-> e, // 值就是MyObject对象自身
                (oldValue, newValue) -> oldValue // 如果有重复,保留旧值
            ))
            // 将Map的Values转换回List
            .values().stream()
            .collect(Collectors.toList());

        uniquePeople.forEach(e-> System.out.println(e.getProperty1() + ", " + e.getProperty2()));
    }
}
相关推荐
程序喵大人6 小时前
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里
开发语言·c++·stl
cui_ruicheng6 小时前
Python从入门到实战(十六):多进程编程
开发语言·python
Jelena157795857927 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库
wdfk_prog7 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
晴空了无痕7 小时前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
神明不懂浪漫8 小时前
【第五章】Java中的继承与多态
java·开发语言
神州世通8 小时前
解密企业通信安全防线:Avaya Aura 三层安全架构深度解析
开发语言·php
AC赳赳老秦9 小时前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
AI多Agent协作实战派9 小时前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit10 小时前
Java+Ai+vue
java·spring·maven