List中存储实体类并根据实体类的指定属性去重

2023-10-26

场景:

  • 如果List中存储的是一些字符串,去重的时候就比较简单,直接使用java中的set集合去重即可。
  • 如果List中存储的是一些是实体类,去重的时候,要根据实体类的部分属性去重,可以使用下面的方法。

举例如下:

  • 实体类
public class TestBean {
    public String name;
    public String listName;
	public int age;
    public String getName() {
        return name;
    }

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

    public String getListName() {
        return listName;
    }

    public void setListName(String listName) {
        this.listName = listName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "TestBean{" +
                "name='" + name + '\'' +
                ", listName='" + listName + '\'' +
                ", age=" + age +
                '}';
    }
}

  • 测试类
public class test01 {
    public static void main(String[] args) {
        List<TestBean> list = new ArrayList<>();
        TestBean testBean1 = new TestBean();
        testBean1.setName("a");
        testBean1.setListName("a");
        testBean1.setAge(1);

        TestBean testBean2 = new TestBean();
        testBean2.setName("a");
        testBean2.setListName("a");
        testBean2.setAge(4);

        TestBean testBean3 = new TestBean();
        testBean3.setName("a");
        testBean3.setListName("b");
        testBean3.setAge(1);

        TestBean testBean4 = new TestBean();
        testBean4.setName("a");
        testBean4.setListName("c");
        testBean4.setAge(3);

        TestBean testBean5 = new TestBean();
        testBean5.setName("a");
        testBean5.setListName("d");
        testBean5.setAge(2);

        list.add(testBean1);
        list.add(testBean2);
        list.add(testBean3);
        list.add(testBean4);
        list.add(testBean5);

        System.out.println("原list大小:" + list.size());
        for (TestBean t : list) {
            System.out.println(t);
        }
        List<TestBean> removeDuplicateList = list.stream()
                .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getListName() + ";" + o.getName()))), ArrayList::new));
        System.out.println("去重后的list大小:" + removeDuplicateList.size());
        for (TestBean t : removeDuplicateList) {
            System.out.println(t);
        }
        System.out.println("去重后按照年龄倒序后的list=======================");
        removeDuplicateList.sort(Comparator.comparing(TestBean::getAge).reversed());
        for (TestBean t : removeDuplicateList) {
            System.out.println(t);
        }
        System.out.println("去重后按照年龄正序后的list=======================");
        removeDuplicateList.sort(Comparator.comparing(TestBean::getAge));
        for (TestBean t : removeDuplicateList) {
            System.out.println(t);
        }
    }
}
  • 运行结果
原list大小:5
TestBean{name='a', listName='a', age=1}
TestBean{name='a', listName='a', age=4}
TestBean{name='a', listName='b', age=1}
TestBean{name='a', listName='c', age=3}
TestBean{name='a', listName='d', age=2}
去重后的list大小:4
TestBean{name='a', listName='a', age=1}
TestBean{name='a', listName='b', age=1}
TestBean{name='a', listName='c', age=3}
TestBean{name='a', listName='d', age=2}
去重后按照年龄倒序后的list=======================
TestBean{name='a', listName='c', age=3}
TestBean{name='a', listName='d', age=2}
TestBean{name='a', listName='a', age=1}
TestBean{name='a', listName='b', age=1}
去重后按照年龄正序后的list=======================
TestBean{name='a', listName='a', age=1}
TestBean{name='a', listName='b', age=1}
TestBean{name='a', listName='d', age=2}
TestBean{name='a', listName='c', age=3}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

List中存储实体类并根据实体类的指定属性去重 的相关文章

随机推荐

  • Day【4】字符串解码

    原题链接 思路 对于字符串k encoding 对于这样的形式 我们要加encoding重复k次 从左向右扫描字符串 如果说遇见字符 就直接将该字符添加到结果中 如果说 遇见 k encoding 的形式 我们首先要做的是就是将k和enco
  • GCC参数详解

    gcc and g 分别是gnu的c c 编译器 gcc g 在执行编译工作的时候 总共需要4步 1 预处理 生成 i的文件 预处理器cpp 2 将预处理后的文件不转换成汇编语言 生成文件 s 编译器egcs 3 有汇编变为目标代码 机器代
  • 9.OB4.0调用存储过程通过临时表返回多行记录

    MYSQL存储过程返回多行 1 表数据准备 drop table if exists t1 drop table if exists t2 drop table if exists t3 create table t1 id varchar
  • 任何程序都必须加载到什么中才能被cpu执行

    任何程序都必须加载到内存中才能被cpu执行 内存是计算机中的重要部件之一 它是外存与cpu进行沟通的桥梁 计算机中所有程序的运行都在内存中进行 内存性能的强弱影响计算机整体发挥的水平 任何程序都必须加载到内存中才能被cpu执行 学习视频分享
  • WPF 性能优化建议

    本章讲述 WPF 性能优化建议 20180930 WPF性能优化问题 运行软件发现CPU使用率很大 80 95 程序中含有委托 线程 定时器的处理 之前优化时 主要优化线程和定时器相关线程方面的处理 但是效果甚微 无意间看到博客中说程序界面
  • Android onInterceptTouchEvent与onTouchEvent调用关系

    概述 onInterceptTouchEvent 是用来拦截Touch事件 ViewGroup有 View没有 onTouchEvent 是Touch事件 ViewGroup与View都有 实例讲解 当一个Touch事件发生后 会由父布局开
  • connect错误:no route to host

    linux下 socket 用vmware装了两个虚拟机 分别运行客户端和服务器端 客户端连接的时候报错 connect error no route to host 但是在同一虚拟机下运行正常 我检查了socket返回值 正常 地址和端口
  • U-boot引导流程分析一

    U Boot 全称 Universal Boot Loader 即通用引导程序 是遵循GPL条款的开放源码项目 它的源码目录 编译形式与Linux内核很相似 事实上 不少U Boot源码就是相应的Linux内核源程序的简化 尤其是一些设备的
  • linuxptp源码研究

    目录 1 检查网卡是否支持相应的时间戳 2 linuxptp的目录架构 3 ptp4l的大致流程分析 4 gptp协议对应的sync follow up delay request delay response消息在代码的位置 5 slav
  • Deeplearning4j 实战 (13):基于TextCNN的文本分类实现

    Eclipse Deeplearning4j GitChat课程 Deeplearning4j 快速入门 专栏Eclipse Deeplearning4j 系列博客 万宫玺的专栏 wangongxi CSDN博客Eclipse Deeple
  • java native

    1 java lang Boolean中没有 native方法2 java lang Character中没有native方法3 java lang Byte中没有本地方法4 java labg Short中没有本地方法5 java lan
  • Go语言学习笔记(六)---map

    4 7 map map是key value数据结构 又称为字段或者给关联数组 类似其他编程语言的集合 映射 基本语法 var map变量名 map keytype valuetype keytype可以是bool int string 指针
  • ubuntu 忘记root密码

    方法一 如果用户具有sudo权限 那么直接可以运行如下命令 sudo su root 输入当前用户的密码 passwd 输入密码 再次输入密码 方法二 如果用户不具备sudo权限 则方法一不能用 并需进入GRUB修改kernel镜像启动参数
  • 如何用 Python 批量循环读取 Excel ?

    在使用 Python 批量处理 Excel 时经常需要批量读取数据 常见的方式是结合glob模块 可以实现将当前文件夹下的所有csv批量读取 并且合并到一个大的DataFrame中 df list for file in glob glob
  • 贪吃蛇(C语言)

    贪吃蛇项目 核心算法 循环数组 发牌算法 二维坐标一维化 编译环境 TC 2 0 准备工作 学习gotoxy 函数 了解bioskey 函数使用 知道bioskey 1 与bioskey 0 的区别 了解键盘扫描码 并且知道如何使用 核心工
  • Java读取ini文件

    Java读取ini文件 文章目录 Java读取ini文件 1 ini文件 2 代码示例 1 ini文件 src config config ini文件内容如下 login autorun n jls 2 url 10 10 1 29 por
  • Linux高性能服务器编程(4)TCP协议详解

    Linux高性能服务器编程 4 TCP协议 TCP服务的特点 TCP协议更靠近应用层 在应用程序中有更好的可操作性 信息 作用 TCP头部 TCP头部信息出现在每个TCP报文段中 用于指定通信的源端端口号 目的端口号 管理TCP连接 控制两
  • unity 动态修改文本方法 GameObject

    using System Collections using System Collections Generic using UnityEngine using UnityEngine SceneManagement using Unit
  • linux文件系统

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 从操作系统的角度详解Linux文件系统层次 文件系统分类 文件系统的存储结构 不
  • List中存储实体类并根据实体类的指定属性去重

    场景 如果List中存储的是一些字符串 去重的时候就比较简单 直接使用java中的set集合去重即可 如果List中存储的是一些是实体类 去重的时候 要根据实体类的部分属性去重 可以使用下面的方法 举例如下 实体类 public class