当前位置: 首页 > article >正文

Java实现根据某个字段对集合进行去重并手动选择被保留的对象

需求说明:

现有对象Student(id,name,age),并有List<Student> students集合,要求:对students集合中的对象按age去重,并保留id较大的那个对象。

Student

public class Student {
    private int id;
    private String name;
    private String age;

    public int getId() {
        return id;
    }

    public void setId(int 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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

实现代码:

public static void main(String[] args) {
        //获取集合
        List<Student> students = getStudentList();
        //输出当前集合
        System.out.println(students);
        //去重后的集合
        List<Student> newStudentList = new ArrayList<>();
        //去重字段和对象
        HashMap<String, Student> stuMap = new HashMap<>();
        //循环
        students.forEach(student -> {
            //出现age重复
            if (stuMap.containsKey(student.getAge())) {
                //老对象
                int oldId = stuMap.get(student.getAge()).getId();
                //新对象
                int currId = student.getId();
                //比较新老对象的Id
                if (oldId < currId) {
                    //如果新对象Id比较大,则保留新对象
                    stuMap.put(student.getAge(), student);
                }
            } else {
                //如果没有重复的直接添加
                stuMap.put(student.getAge(), student);
            }
        });
        //把数据转移到新集合里
        newStudentList.addAll(stuMap.values());
        System.out.println(newStudentList);
    }

    private static List<Student> getStudentList() {
        List<Student> students = new ArrayList<>();
        Student st1 = new Student();
        st1.setId(1);
        st1.setName("张三");
        st1.setAge("23");
        students.add(st1);

        Student st2 = new Student();
        st2.setId(2);
        st2.setName("李四");
        st2.setAge("24");
        students.add(st2);

        Student st3 = new Student();
        st3.setId(3);
        st3.setName("王五");
        st3.setAge("25");
        students.add(st3);

        Student st4 = new Student();
        st4.setId(4);
        st4.setName("赵六");
        st4.setAge("23");
        students.add(st4);
        return students;
    }

http://www.kler.cn/a/290649.html

相关文章:

  • 数据分析那些事儿——时间片轮转实验
  • WorkFlow源码剖析——Communicator之TCPServer(下)
  • 微信小程序_模板与配置_day2
  • 11.11比赛总结
  • 【架构论文-1】面向服务架构(SOA)
  • 提升法律文书处理效率的秘密武器:开源文档比对工具解析
  • vuex 基础使用
  • 网页版修改本地数据器:重新布局,引入 highlight.js高亮显示代码
  • 鸿蒙Next-拉起支付宝的三种方式——教程
  • 【Linux】理解Linux中的软链接与硬链接
  • 传统CV算法——背景建模算法介绍
  • 架构基础 -- 打点系统之FastAPI、python、grafana、prometheus实现
  • Unity数据持久化 之 文件操作(增删查改)
  • 【赵渝强老师】大数据生态圈中的组件
  • 8 自研rgbd相机基于rk3566之sensor图像解析与AWB算法原理
  • SQL语言的规则和规范
  • 盘点成都产业园前十,寻找你的理想创业地!
  • Pencils Protocol生态新进展,即将上线 Vault 产品
  • Python的list和numpy的array有什么区别?
  • 2024自动化测试面试真题(附答案)!
  • 基于FPGA的OV5640摄像头图像采集
  • centOS如何查看并放行防火墙3306端口
  • 无人机喊话器详解!!!
  • flannel,etcd,docker
  • Jmeter(十四)Jmeter分布式部署测试
  • LeetCode - 10 正则表达式匹配