Java List按照某字段去重

news2025/5/23 21:43:34

Java List按照某字段去重

  • 嘚吧嘚
  • distinct
    • 示例一
    • 示例二
  • 根据某个字段去重
  • Collectors.collectingAndThen()

嘚吧嘚

Java8流的新类java.util.stream.Collectors实现了java.util.stream.Collector接口,同时又提供了大量的方法对流(stream)的元素执行各种统计操作。

distinct

示例一

List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    HashMap<String, Object> e = new HashMap<>();
    e.put("name", "Mike");
    e.put("age", 19);
    mapList.add(e);
    HashMap<String, Object> f = new HashMap<>();
    f.put("name", "John");
    f.put("age", 19);
    mapList.add(f);
}
System.out.println(mapList);
System.out.println("===================去重===================");
List<Map<String, Object>> collect = mapList.stream().distinct().collect(Collectors.toList());
collect.forEach(System.out::println);

执行结果如下

在这里插入图片描述但是这种方式必须要每个键值对都一样,才会被判定成重复的,否则不会被判为重复,如下。

示例二

List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    HashMap<String, Object> e = new HashMap<>();
    e.put("name", "Mike");
    e.put("age", 19 + i);
    mapList.add(e);
    HashMap<String, Object> f = new HashMap<>();
    f.put("name", "John");
    f.put("age", 19 + i);
    mapList.add(f);
}
System.out.println(mapList);
System.out.println("===================去重===================");
List<Map<String, Object>> collect = mapList.stream().distinct().collect(Collectors.toList());
collect.forEach(System.out::println);

执行结果如下

在这里插入图片描述虽然name的值一样,但是age的值不一样,所以没有被被判定为重复。

所以如果要按照某字段去重,请采用如下方式。

根据某个字段去重

List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    HashMap<String, Object> e = new HashMap<>();
    e.put("name", "Mike");
    e.put("age", 19 + i);
    mapList.add(e);
    HashMap<String, Object> f = new HashMap<>();
    f.put("name", "John");
    f.put("age", 19 + i);
    mapList.add(f);
}
System.out.println(mapList);
System.out.println("===================去重===================");
List<Map<String, Object>> collect = mapList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(p -> String.valueOf(p.get("name"))))), ArrayList::new));
collect.forEach(System.out::println);

执行结果如下

在这里插入图片描述代码中用到了“Collectors.collectingAndThen”,这个函数是干什么的呢?咱们继续。

Collectors.collectingAndThen()

从函数名字就可以看出,这个函数分为两个部分,一个是collecting,另一个是then。

Collectors.collectingAndThen()函数很像map and reduce,它可接受两个参数,第一个参数用于reduce(collecting)操作,而第二参数用于map(then)操作。
也就是,先把流中的所有元素传递给第一个参数,然后把生成的集合传递给第二个参数来处理。

List<Integer> list = Arrays.asList(1, 2, 3, 4);
Double result = list.stream().collect(Collectors.collectingAndThen(Collectors.averagingLong(item -> item * 2), res -> res * 3));
System.out.println("result = " + result);

执行结果如下

在这里插入图片描述
逻辑如下

  1. 把[1,2,3,4]这个集合传递给item -> item * 2这个lambda表达式,计算得出结果为[2,4,6,8]
  2. 然后再把[2,4,6,8]传递给Collectors.averagingLong表达式,计算得出5.0
  3. 然后传递给res -> res * 3这个lambda表达式,计算得到结果为15.0

欢迎大家进行指正或者补充!🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实战: 跨年烟花代码的实现(附源码)

目录 前言 一、pandas是什么&#xff1f; 二、代码结构 1.介绍主html代码 2. js文件介绍 GameCanvas.js script.js 运行效果 前言 本文章将介绍跨年烟花代码的实现以及源代码 提示&#xff1a;以下是本篇文章正文内容 一、pandas是什么&#xff1f; 示例&#xff1a;pandas …

css3-动画

目录语法转换平移旋转缩放复合属性的顺序问题过渡动画帧动画案例案例1-热点图dot(缩放)案例2-热点图dot(缩放)案例3-开红包(旋转)问题问题1-transform不起作用问题2 - 过渡动画不起效果语法 转换 css3中的转换允许我们对元素进行旋转、缩放、移动或倾斜。它分为2D转换 或 3D转…

开箱即用的物联网平台-IoTLink

物联网平台是物联网生态系统的重要组成部分&#xff0c;也是一个快速增长的市场&#xff0c;物联网平台为企业提供了巨大的价值&#xff0c;使他们能够降低开发成本、加速启动和简化流程。 一个完整的物联网系统需要硬件、连接、软件、用户界面等。在较高的层面上&#xff0c;…

menuconfig的执行过程

menuconfig &#xff08;1&#xff09;首先在uboot源码顶层目录下的Makefile文件中查找config&#xff08;%表示省略&#xff09; &#xff08;2&#xff09;执行make menuconfig&#xff0c;分别打印输出$(MAKE)、$(bulid)、$可知其对应的内容&#xff0c;如上图所示 总结&a…

用docker部署django后台作为webstack的后台管理系统-其二

0 序言 在之前的博客中&#xff1a; 用docker部署webstack导航网站-其一https://blog.csdn.net/qq_41938259/article/details/128736551?spm1001.2014.3001.5501我成功的将webstack官方推荐的docker容器部署了出来&#xff0c;但是官方的docker容器后端使用的是PHP&#xff0…

08_FreeRTOS列表和列表项讲解

目录 列表和列表项的简介 列表 列表项 迷你列表项 列表和列表项的关系 列表相关API函数介绍 初始化列表vListInitialise函数详解 列表项的初始化函数vListInitialiseItem函数 列表项的插入vListInsert函数 列表项末尾插入vListInsertEnd函数 列表项的删除函数uxLis…

零入门容器云网络实战-5->路由知识总结

本篇文章主要用于收集、整理、总结路由相关知识点。 1、路由分为几种&#xff1f; 直连路由静态路由&#xff08;基本静态路由&#xff0c;等价静态路由&#xff0c;活动静态路由&#xff0c;缺省静态路由&#xff09;动态路由 通过路由协议从相邻路由器学习到的。路由协议&am…

一,SpringMVC入门

0 MVC设计模式 View&#xff08;视图&#xff09;&#xff1a;页面&#xff08;jsp、html&#xff09;&#xff0c;接收用户数据和显示结果。 Controller&#xff08;控制器&#xff09;&#xff1a;action&#xff0c;接收请求&#xff0c;决定程序执行流程。 Model&#xf…

【深度学习】——循环神经网络RNN及实例气温预测

引言 密集连接网络和卷积神经网络都有主要的特点&#xff0c;那就是它们没有记忆。它们单独处理每个输入&#xff0c;在输入和输入之间没有保存任何状态。举个例子&#xff1a;当你在阅读一个句子的时候&#xff0c;你需要记住之前的内容&#xff0c;我们才能动态的了解这个句子…

三、SqlSession的创建以及执行流程

简介 SqlSession接口提供了查询&#xff0c;插入&#xff0c;更新&#xff0c;删除方法&#xff0c;Mybatis中所有的数据库交互都由SqlSession来完成。SqlSession 对象完全包含以数据库为背景的所有执行 SQL 操作的方法&#xff0c;它的底层封装了 JDBC 连接&#xff0c;可以用…

微服务链路追踪SkyWalking学习笔记

目录 1、skywalking是什么 1.2 链路追踪框架对比 1.3 性能对比 1.4 Skywalking主要功能特性 2、 SkyWalking 环境搭建部署 2.1 下载 SkyWalking 2.2 搭建SkyWalking OAP 服务 2.3 SkyWalking中三个概念 3、 SkyWalking 接入微服务 3.1 linux环境—通过jar包方式接入 …

SAP ADM100-2.5 系统启动:日志文件

本节将介绍SAP ABAP系统启动时最重要的log文件和Trce文件,以掌握通过使用系统启动log文件和trace文件分析系统问题。 1、记录系统启动过程 启动过程是一个特别重要的阶段,因此该过程将被操作系统、SAP系统、数据库记录。如果SAP系统没有启动,那么你将在log日志文件中发现相…

C#使用IronPython调用Python

一、前言以下摘自百度百科&#xff1a;IronPython 是一种在 NET 和 Mono 上实现的 Python 语言&#xff0c;由 Jim Hugunin&#xff08;同时也是 Jython 创造者&#xff09;所创造。1.0 版于2006年9月5日发布。随后&#xff0c;在 2007 年&#xff0c;开发者决定改写架构&#…

音视频xxxx

文章目录前言编解码硬件解码(高级)软解码(低级)软、硬解码对比视频解码有四个步骤Android 系统中编解码器的命名方式查看当前设备支持的硬解码基础知识RGB色彩空间常见的格式对比YUV索引格式分离RGB24像素数据中的R、G、B分量BMP 文件格式格式组成像素排列顺序RGB24格式像素数据…

Apache Solr 9.1-(三)集群模式下通过Http API操作Apache Solr

Apache Solr 9.1-&#xff08;三&#xff09;集群模式下通过Http API操作Apache Solr Solr是一个基于Apache Lucene的搜索服务器&#xff0c;Apache Lucene是开源的、基于Java的信息检索库&#xff0c;Solr能为用户提供无论在任何时候都可以根据用户的查询请求返回结果&#xf…

网络原理(TCP/IP)(3)

4)滑动窗口 1)咱们滑动窗口的效果就是说在我们尽可能地保证可靠性的情况下&#xff0c;尽可能的提高传输效率2)况且咱们进行发送滑动窗口的本质就是说进行批量的发送数据&#xff0c;咱们尽可能说是把等待ACK的时间总体进行缩短&#xff0c;咱们可以把等待一份ACK的时间变成等待…

凸优化学习:PART1凸集

凸优化学习PART1 一、引言&#xff1a;优化问题简介 优化问题的定义 凸优化是优化的一种&#xff0c;是优化中比较容易的问题。在讲解优化问题前&#xff0c;首先说明什么是优化/数学规划&#xff08;Optimization/Mathematical Planning&#xff09;。 优化&#xff1a;从一…

搭建electron开发环境

electron是使用js,html,css构建桌面端应用程序的框架&#xff0c;可以使用electron开发Windows和Mac端应用。 安装nodejs,npm,cnpm 首先需要安装nodejs,npm和cnpm&#xff0c;安装后在命令行输入 node -v 和npm -v&#xff0c;如果输出了版本号&#xff0c;说明已经正常安装。…

数据仓库-数据模型建设方法总结(全)

一、大数据领域建模综述 1.1 为什么需要数据建模 有结构地分类组织和存储是我们面临的一个挑战。 数据模型强调从业务、数据存取和使用角度合理存储数据。 数据模型方法&#xff0c;以便在性能、成本、效率之间取得最佳平衡 成本&#xff1a;良好的数据模型能极大地减少不必…

MyBatis:批量添加记录

MyBatis&#xff0c;一款优秀的ORM映射框架&#xff0c;可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Old Java Objects&#xff0c;普通老式 Java 对象&#xff09;为数据库中的记录。同时&#xff0c;MyBatis提供了动态SQL特性&#x…