java8中List根据某一字段去重

2023-11-20

实体类:

package test;

public class User {
    private String userid;
    private String username;
    private String age;
    private String address;
    
    public User(String userid, String username, String age, String address) {
        super();
        this.userid = userid;
        this.username = username;
        this.age = age;
        this.address = address;
    }
    
    public String getUserid() {
        return userid;
    }
    public void setUserid(String userid) {
        this.userid = userid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "User [userid=" + userid + ", username=" + username + ", age=" + age + ", address=" + address + "]";
    }
}

测试:

package test;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;

public class Test1 {

    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        
        userList.add(new User("1","李大锤","23","南京"));
        userList.add(new User("2","张无忌","18","西安"));
        userList.add(new User("3","刘德华","26","苏州"));
        userList.add(new User("4","郭靖","33","上海"));
        
        userList.add(new User("1","李大锤","23","南京"));    //id相同,其他数据也相同
        userList.add(new User("3","带头大哥","36","杭州"));  //id相同,其他数据不同
        
        System.out.println(userList);
        //根据userid去重
        userList = userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User :: getUserid))), ArrayList::new));
        System.out.println(userList);
    }
}

测试结果:

[User [userid=1, username=李大锤, age=23, address=南京], User [userid=2, username=张无忌, age=18, address=西安], User [userid=3, username=刘德华, age=26, address=苏州], User [userid=4, username=郭靖, age=33, address=上海], User [userid=1, username=李大锤, age=23, address=南京], User [userid=3, username=带头大哥, age=36, address=杭州]]

[User [userid=1, username=李大锤, age=23, address=南京], User [userid=2, username=张无忌, age=18, address=西安], User [userid=3, username=刘德华, age=26, address=苏州], User [userid=4, username=郭靖, age=33, address=上海]]

可以看出,此操作把后面的两个id相同的都给剔除了。若两个id一样,其他数据不同的话,留下的数据是靠前的数据,剔除的是靠后的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java8中List根据某一字段去重 的相关文章

随机推荐

  • 交换机与路由器工作原理

    前言 这篇博客的主要目的是为了聊一下路由器和交换机 以及它们各自的工作原理和对应的两张表 交换机 1 简单介绍交换机 这里的交换机主要讲的是 二层交换机 它工作在OSI七层模型中的第二层 也就是数据链路层 因此就不得不说一下数据链路层的功能
  • 梯度提升树(GBDT)原理和超参数调节小结

    GBDT原理 GBDT超参数调节 以上都出自刘建平老师的博客 刘老师的博客对机器学习算法的总结很细致全面 值得学习
  • 关于obsidian和typora之间格式无法兼容的解决(图片显示问题)

    要在obsidian中进行如下设置 也就是将每个markdown文件中的图片都放在该markdown文件所在的文件夹中 然后图片的格式是通用markdown的格式 路径是基于该文件的相对路径 使用时 每个文件都单独创建一个文件夹来放置 然后
  • 【超级无敌详细的韩顺平java笔记】从入门到精通---配置patth

    JVM 是一个虚拟的计算机 具有指令集并使用不同的存储区域 负责执行指令 管理数据 内存 寄存器 包含在 JDK 中 java文件 源文件 class文件 字节码文件 目录 一 编译 二 运行 三 JDK JRE 和 JVM 的包含关系 四
  • 瑞吉外卖项目实战

    目录 一 软件开放流程 二 瑞吉外卖项目概述 三 开发环境搭建 1 数据库环境的搭建 一 启动Navicat 二 数据库设计 三 创建数据库 四 导入数据库脚本 五 查看数据库中的表 四 Maven项目搭建 一 创建Maven项目 二 检查
  • 基于Springboot搭建java项目(十五)——RabbitMq的确认机制和延时通知

    RabbitMq的确认机制和延时通知 一 消息发送确认 在RabbitConfig中两个回调函数 一个叫 ConfirmCallback 一个叫 RetrunCallback 1 交换机确认 ConfirmCallback方法 Confir
  • R包实践:lubridate 处理时间数据

    人生有一道难题 那就是如何使一寸光阴等于一寸生命 在数据分析中也有一道难题 那就是如何自如的操作时间数据 R语言的基础包中提供了两种类型的时间数据 一类是Date日期数据 它不包括时间和时区信息 另一类是POSIXct POSIXlt类型数
  • Java实现MD5加密及解密的代码实例

    础 MessageDigest类的使用 其实要在Java中完成MD5加密 MessageDigest类大部分都帮你实现好了 几行代码足矣 对字符串md5加密 param str return import java security Mes
  • DevExpress设置单元格不可编辑,选单元格则选中一行

    DevExpress设置单元格不可编辑 选单元格则选中一行 目的是只展示数据 不提供修改功能 DevexpressGridControl禁止点击单元格修改 设置GridView OptionsBehavior的Editable选项设为Fal
  • JAVA多线程实现-单线程化线程池newSingleThreadExecutor

    JAVA通过Executors提供了四种线程池 单线程化线程池 newSingleThreadExecutor 可控最大并发数线程池 newFixedThreadPool 可回收缓存线程池 newCachedThreadPool 支持定时与
  • char类型数据的取值范围如何确定

    char类型数据是计算机编程语言中只可容纳单个字符的一种基本数据类型 取值范围为 128 127 对于上述概念相信大家都已经很熟悉了 但仍有不少同学对于char类型数据的取值范围抱有疑问 不知道为什么char类型数据的取值范围如何确定 若要
  • 浮点数是否与零相等的判断方法

    1 如何判断单精度浮点数 float a是否等于零 if fabs a lt 1e 6 如果成立 则a等于0 2 如何判断双精度浮点数 double a是否等于零 if fabs a lt 1e 15 如果成立 则a等于0 3 如何判断两个
  • Vue传递数据到后台SpringMVC接收解析返回

    最近在自学vue 开始以为跟angular大同小异 但是真正使用的时候发现还是很多不一样的地方 可能是因为刚刚开始理解的还不够深入O O 下面说说前端jsp怎么和后台交互 后台使用的是springMvc框架 html部分 div table
  • python算法中的机器学习算法之无监督学习知识点(详解)

    目录 学习目标 学习内容 K均值聚类 K Means Clustering 层次聚类 Hierarchical Clustering
  • 带你使用Golang快速构建出命令行应用程序

    在日常开发中 大家对命令行工具 CLI 想必特别熟悉了 如果说你不知道命令工具 那你可能是个假开发 每天都会使用大量的命令行工具 例如最常用的Git Go Docker等 不管是做技术开发还是业务开发 都会有开发命令行程序的场景 例如如果是
  • tomcat升级版本升级

    tomcat升级 1 查看当前tomcat版本 一般tomcat安装在 usr local 下 cd 至apache tomcat xxx bin sh version sh命令 查看版本信息 2 下载需要的tomcat安装包 下载网址 h
  • JavaScript 分支结构语句

    JavaScript 分支结构语句 1 if语句 2 if else语句 双分支语句 3 if else if 语句 多分支语句 4 三元表达式 5 switch语句 语句 也称为流控制语句 通常使用一或多个关键字完成既定的任务 语句可以简
  • 使用Export2Excel.js导出excel

    使用Export2Excel js导出excel 安装依赖 下载Export2Excel js文件 使用 安装依赖 npm install S file saver npm install S xlsx npm install D scri
  • python实现石头剪刀布_利用python实现和电脑玩石头剪刀布

    先说一下石头剪刀布的游戏规则 1 石头 胜 剪刀 2 剪刀 胜 布 3 布 胜 石头 石头 1 剪刀 2 布 3 其中电脑是随机输出1 3之间的整数 玩家手动输入 了解一下python的随机处理 下面上代码 导入随机工具包 importra
  • java8中List根据某一字段去重

    实体类 package test public class User private String userid private String username private String age private String addre