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

两个同一对象targetList和 sourceList 去重

我现在需要解决的问题是从一个Java的源列表`sourceList`中移除所有在目标列表`targetList`中存在的数据,并且还要去除`targetList`中的重复数据。让我先理清楚这两个问题的思路。

首先,如何快速从`sourceList`中移除含有`targetList`的数据。这里的“含有”应该是指两个列表中的元素是相同的,或者根据某个唯一标识来判断是否相同。假设这两个列表中的元素都是`xxxEntity`类型的对象,那么可能需要根据某个字段来比较,比如`cate_id`,因为每个分类可能有唯一的ID。所以步骤可能是:

1. 提取`targetList`中所有元素的`cate_id`,存入一个集合,比如`Set<String>`,这样可以快速查找。

2. 遍历`sourceList`,检查每个元素的`cate_id`是否存在于这个集合中,如果存在,则从`sourceList`中移除该元素。

接下来,如何给`targetList`去重。同样,去重的依据应该也是`cate_id`,因为可能有重复的`xxxEntity`对象具有相同的`cate_id`。所以需要:

1. 创建一个新的列表或集合,用于存放唯一的元素。

2. 遍历`targetList`,对于每个元素,检查其`cate_id`是否已经存在于新集合中,如果不存在则添加,否则跳过。

不过,这里需要注意,Java中的集合操作,特别是使用`List`的时候,直接遍历并删除可能会导致并发修改异常。因此,可能需要使用迭代器或者Java 8的流操作来安全地移除元素。或者,更高效的方法是创建一个新的列表,只保留不重复的元素。

对于第一个问题,使用Java 8的流API可能会更简洁。例如,使用`filter`来保留那些不在`targetList`中的元素。同时,为了提高效率,可以先将`targetList`的`cate_id`存入一个`HashSet`,这样查找的时间复杂度是O(1)。

对于去重问题,同样可以使用Java 8的流,通过`distinct()`方法,但需要确保`xxxEntity`正确实现了`equals()`和`hashCode()`方法,基于`cate_id`来判断是否相等。如果没有正确实现,可能需要使用`Collectors.toMap`来手动去重,以`cate_id`为键,保留唯一的元素。

现在,我需要考虑如何具体实现这些步骤。可能需要注意以下几点:

- 如何正确获取每个元素的`cate_id`。

- 确保在遍历列表时不会出现并发修改的问题。

- 对于去重,使用合适的数据结构,比如`LinkedHashSet`来保持顺序。

可能的实现步骤:

1. **从sourceList中移除targetList存在的元素:**

- 提取所有`targetList`中的`cate_id`到`Set<String> targetIds`。

- 使用迭代器或者流过滤`sourceList`,只保留那些`cate_id`不在`targetIds`中的元素。

2. **去除targetList中的重复数据:**

- 使用`Stream`的`collect`方法,结合`toMap`,以`cate_id`为键,保留第一个或最后一个出现的元素,然后提取值作为新的列表。

- 或者遍历`targetList`,将元素添加到一个`LinkedHashSet`中,该集合自动去重并保持顺序,前提是正确重写`equals`和`hashCode`。

不过,假设`xxxEntity`没有正确实现`equals`和`hashCode`,那么可能需要手动处理去重。例如,使用一个`Set`来跟踪已经处理过的`cate_id`,然后构建新的列表。

现在,我需要编写具体的代码示例。

对于第一个问题:

```java

Set<Str

相关文章:

两个同一对象targetList和 sourceList 去重

我现在需要解决的问题是从一个Java的源列表`sourceList`中移除所有在目标列表`targetList`中存在的数据,并且还要去除`targetList`中的重复数据。让我先理清楚这两个问题的思路。 首先,如何快速从`sourceList`中移除含有`targetList`的数据。这里的“含有”应该是指两个列表中…...

软件开发 | GitHub企业版常见问题解读

什么是GitHub企业版&#xff1f; GitHub企业版是一个企业级软件开发平台&#xff0c;专为现代化开发的复杂工作流程而设计。 作为可扩展的平台解决方案&#xff0c;GitHub企业版使组织能够无缝集成其他工具和功能&#xff0c;并根据特定需求定制开发环境&#xff0c;提高整体…...

Docker 网络的配置与管理

目录 查看所有网络 查看网络详细信息 创建新的网络 删除网络 清理未使用的网络 将容器连接到网络 将容器从网络中断开 将容器端口映射到宿主机 绑定到特定 IP 地址 为容器设置自定义 DNS 查看所有网络 docker network ls 功能&#xff1a;列出所有 Docker 网络。 工…...

新手自学:如何用gromacs对简单分子复合物进行伞形采样

1、建立体系: 1、将蛋白的pdb文件转化为gmx: gmx pdb2gmx -f 2BEG_model1_capped.pdb -ignh -ter -o complex.gro 这个网页可以实现将多肽序列转化为pdb: ProBuilder On-line 这个教程的蛋白2BFG包含两条链(chain A和B) 在生成的topol文件中,增加如下的内容,效果就…...

力扣第一题 哈希解法 O(n)时间复杂度

题目&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那俩个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你可以按任意顺序返…...

elementui: el-dialog的header设置样式不生效

问&#xff1a; el-dialog的header设置样式不生效 回答&#xff1a; 场景&#xff1a; <el-dialogv-model"dialogVisible"width"800px":before-close"beforeClose"append-to-body:close-on-click-modal"false"title"增加文…...

libpcap 的使用

1.libpcap的模式 有线环境: 使用混杂模式promisous&#xff0c;完成监听无线环境: 使用监听模式monitor&#xff0c;完成监听 2.交叉编译libpcap 设置好交叉编译工具链后下载libpcap源码使用configure进行构建&#xff1a;–disable-shared 构建静态库&#xff0c;–host 、…...

ArcGISPro AA表O_Name字段 内容 复制到BB表BB字段里

import arcpy# 设置工作空间和要处理的表路径 resource_shape_table r"AA表.shp" # 源表路径 resource_assets_table r"BB表.shp" # 目标表路径# 使用 SearchCursor 读取源表中的 O_Name 字段 with arcpy.da.SearchCursor(resource_shape_table, [O_Na…...

2.5 使用注解进行单元测试详解

Mockito 使用注解进行单元测试详解 Mockito 提供了一系列注解来简化测试代码的编写&#xff0c;减少手动创建和管理 Mock 对象的样板代码。结合 JUnit 5&#xff0c;可以更高效地构建清晰、易维护的单元测试。 1. 核心注解概览 注解作用Mock创建并注入一个 Mock 对象&#xf…...

当没有OpenGL时,Skia如何绘制?

Skia 是可以在没有 OpenGL 的情况下进行图形绘制的&#xff0c;但是具体能否成功绘制图形&#xff0c;取决于 Skia 是如何配置的&#xff0c;以及平台上是否提供了其他的底层图形 API。 Skia 的底层依赖 Skia 的目标是提供一种跨平台的 2D 图形绘制接口。为了加速图形渲染&…...

SaaS+AI应用架构:业务场景、智能体、大模型、知识库、传统工具系统

SaaSAI应用架构&#xff1a;业务场景、智能体、大模型、知识库、传统工具系统 大家好&#xff0c;我是汤师爷~ 在SaaS与AI应用的演进过程中&#xff0c;合理的架构设计至关重要。本节将详细介绍其五个核心层次&#xff1a; 业务场景层&#xff1a;发现和确定业务场景智能体层…...

Go 语言中如何高效地处理集合

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

布隆过滤器到底是什么东西?它有什么用

布隆过滤器&#xff1a;用概率换空间的奇妙数据结构 引言&#xff1a;当空间成为奢侈品 在互联网每天产生2.5万亿字节数据的时代&#xff0c;Google每秒处理超过9万次搜索请求&#xff0c;Redis缓存系统支撑着百万级QPS的访问。面对如此海量的数据处理需求&#xff0c;传统的…...

【数据结构初阶第十节】队列(详解+附源码)

好久不见。。。别不开心了&#xff0c;听听喜欢的歌吧 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。云边有个稻草人-CSDN博客 目录 一、概念和结构 二、队列的实现 Queue.h Queue.c test.c Relaxing Time&#xff01; ————————————《有没…...

沪深300股指期权能对股指期货进行完全套保吗?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 沪深300股指期权能对股指期货进行完全套保吗&#xff1f; 沪深300股指期权是以沪深300指数为标的物的期权&#xff0c;而沪深300股指期货则是以该指数作为标的的期货合约。 理…...

JAVA学习第三天

继承关系变量访问的特点 01.方法中找 02.子类变量定义中找 03.父类中找 this和super关键字的使用区别&#xff1a; super父类构造函数的使用&#xff1a; 使用子类构造函数时&#xff0c;都会初始化父类的数据&#xff0c;自动调用父类的无参构造函数 super内存图——007 继…...

win11电脑其他WiFi可以连,只有一个WiFi连不上

这个问题卡了一小会&#xff0c;查了一些资料 后面发现 点击“诊断网络问题” 显示没有响应 第一步 重启wlan网络适配器 解决&#xff01;&#xff01;&#xff01; 重新连接那个有问题的wifi&#xff0c;丝滑连接&#xff01;...

leetcode_1760 袋子里最少数目的球

1. 题意 给定一个数组&#xff0c;和一个最多次操作次数。每次操作可以将数组中的一个数 x x x分成两个数 t x − t t\quad x-t tx−t。问 m a x O p e r a t i o n C n t maxOperationCnt maxOperationCnt次操作后&#xff0c;数组中最大的数最小的值是多少。 2. 题解 这个…...

Python 面向对象的三大特征

前言&#xff1a;本篇讲解面向对象的三大特征&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;还有比较细致的&#xff08;类属性类方法&#xff0c;静态方法&#xff09;&#xff0c;分步骤讲解&#xff0c;比较适合理清楚三大特征的思路 面向对象的…...

Linux下的进程切换与调度

目录 1.进程的优先级 优先级是什么 Linux下优先级的具体做法 优先级的调整为什么要受限 2.Linux下的进程切换 3.Linux下进程的调度 1.进程的优先级 我们在使用计算机的时候&#xff0c;通常会启动多个程序&#xff0c;这些程序最后都会变成进程&#xff0c;但是我们的硬…...

3步解锁游戏窗口任意分辨率:SRWE终极使用指南

3步解锁游戏窗口任意分辨率&#xff1a;SRWE终极使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾经遇到过这样的情况&#xff1a;想用游戏截图制作精美的壁纸&#xff0c;却发现游戏内置的分辨…...

LeRobot:开源机器人学习的终极指南 - 从零到真实世界的AI机器人控制

LeRobot&#xff1a;开源机器人学习的终极指南 - 从零到真实世界的AI机器人控制 【免费下载链接】lerobot &#x1f917; LeRobot: Making AI for Robotics more accessible with end-to-end learning 项目地址: https://gitcode.com/GitHub_Trending/le/lerobot LeRobo…...

基于适配器模式构建跨平台待办事项聚合器:设计、实现与实战

1. 项目概述&#xff1a;一个跨平台待办事项聚合器的诞生最近在整理自己的效率工具时&#xff0c;发现了一个挺普遍但又很恼人的问题&#xff1a;我的待办事项散落在各处。工作上的任务在公司的Jira里&#xff0c;个人学习计划在滴答清单&#xff0c;一些临时想法随手记在手机备…...

3分钟掌握微信聊天记录永久保存:从数据备份到智能分析完全攻略

3分钟掌握微信聊天记录永久保存&#xff1a;从数据备份到智能分析完全攻略 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

Cadence 17.4导出Gerber文件保姆级避坑指南(附TMC2300电机驱动板实战)

Cadence 17.4导出Gerber文件保姆级避坑指南&#xff08;附TMC2300电机驱动板实战&#xff09; 第一次用Cadence Allegro 17.4导出Gerber文件的新手&#xff0c;大概率会在某个环节卡住——要么是钻孔文件莫名报错&#xff0c;要么是板厂反馈光绘层对不齐。这种挫败感我太熟悉了…...

别再死记公式了!用复平面几何法直观理解Biquad滤波器设计

用复平面几何法直观理解Biquad滤波器设计 当你第一次接触数字滤波器时&#xff0c;那些复杂的差分方程和z变换公式是否让你望而生畏&#xff1f;作为音频处理领域的入门者&#xff0c;我曾花了整整两周时间试图理解一个简单的二阶滤波器公式&#xff0c;直到发现了复平面几何法…...

别再为Matlab App打包发愁了!手把手教你从Web部署到桌面应用(含Runtime安装避坑)

从零到一&#xff1a;Matlab App Designer全流程打包实战指南 第一次尝试将Matlab App Designer开发的应用程序打包成可执行文件时&#xff0c;那种既期待又忐忑的心情相信很多开发者都深有体会。作为一款强大的交互式开发环境&#xff0c;Matlab App Designer让图形用户界面(G…...

63岁黄仁勋再添博士头衔、英特尔CEO为其披袍,最新演讲刷屏:人类编写软件、计算机执行指令的范式已终结!

整理 | 苏宓 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 日前&#xff0c;在卡内基梅隆大学&#xff08;CMU&#xff09;的 2026 届毕业典礼上&#xff0c;英伟达 CEO 黄仁勋的头衔再加一&#xff0c;最新获得 CMU 科学与技术荣誉博士学位&#xff0c;而这也是…...

ADB 配置 + 入门使用全攻略,零基础看完就精通

一、ADB简介 1、什么是adb ADB 全称为 Android Debug Bridge&#xff0c;起到调试桥的作用&#xff0c;是一个客户端-服务器端程序。其中客户端是用来操作的电脑&#xff0c;服务端是 Android 设备。 ADB 也是 Android SDK 中的一个工具&#xff0c;可以直接操作管理 Androi…...

西门子博图V17变量导入昆仑通态MCGS Pro的保姆级避坑指南(含DB块偏移量设置)

西门子博图V17与MCGS Pro高效数据对接实战指南 在工业自动化系统集成中&#xff0c;西门子TIA Portal&#xff08;博图&#xff09;与昆仑通态MCGS Pro触摸屏的数据交互是常见需求。许多工程师在变量导入环节频繁遭遇DB块偏移量异常、变量名截断、数据类型不匹配等"暗坑&q…...