对比两个List,区分重复数据(优化)。

2023-05-16

1. 背景

现在日常工作中经常会遇到两组数据对比碰撞的需求,菜菜不才,之前写了一个不怎么优雅的代码才解决了问题,而且还是只能对比String的,菜菜有空后赶紧写了一个比较优雅的方式解决了list比对的问题。

2. 代码

2.1 原始版本

/**
* 两个List对比
* @param listA
* @param listB
* @return  repeatList  A与B的重复数据
* @return  returnList  A与B的不重复数据
*/
public static Map<String,List<String>> stringIntersectionDelete(List<String> listA, List<String> listB){
  //返回一个map,一个是去重后的list,一个是被删除的list
  Map<String,List<String>> returnMap=new HashMap<>(16);

  List<String> repeatList=new ArrayList<>();

  for (Iterator<String> itA = listA.iterator(); itA.hasNext();)
  {
      String temp = itA.next();
      // itA.next() 只能在外层循环里面调用1次
      for (int i = 0; i < listB.size(); i++)
      {
          if (temp.equals(listB.get(i)))
          // 你不该在这里多次调用itA.next()的
          {
              repeatList.add(temp);
              itA.remove();
          }
      }
  }
  returnMap.put("repeatList",repeatList);
  returnMap.put("returnList",listA);
  return returnMap;
}

2.2 改良版本

List<String> list1 = Arrays.asList("123", "456", "789", "987", "654", "321","222");

List<String> list2 = Arrays.asList("123", "456", "789");
//核心代码
Map<Boolean, List<String>> collect = list1.stream().collect(Collectors.partitioningBy(obj ->
      list2.stream().anyMatch(obj2 -> obj.equals(obj2))
));
System.out.println(collect);

3. 结语

可以看到改良后的代码是比较优雅的,必经就两行。内部底层也是使用了两层for所以时间维度上是一样的,简介度却高了很多,最主要的是,还可以用在Object 上,只要挑出对比值,或者整个对象toString对比即可,使用程度也是有提升的。所以还是要多看一点新特性啊。

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

对比两个List,区分重复数据(优化)。 的相关文章

  • github使用小技巧-在线运行项目

    登录github找到自己想要查看的项目 在项目中按下键盘的 34 34 句号 即可直接打开远程vscode xff0c 和本地的vs工具一样 xff0c 无需下载源码省时省力 在前缀上携带命令参数 gitpod io 回车确认后将会远程搭建
  • vue引入element不显示样式以及一些别的问题

    文章目录 vue2 0和vue3 0引入element不同vue2 0vue3 0 element使用错误在这里插入图片描述在这里插入图片描述 vue2 0和vue3 0引入element不同 跟着视频学习时 xff0c 自己用的3 0版本
  • mybatis-plus分页查询临时返回所有数据

    我们在编写业务逻辑时候 xff0c 有时需要借助mybatis plus分页查询 xff0c 但需要返回全部符合条件的数据 xff0c 经过实践发现 xff0c 只需要把 Page 对象的 current xff0c size 全部重置为
  • 学习心得:控件之Tree Control (仿系统目录树视图)

    一 几个概念 xff08 摘 xff09 1 外壳名字空间 xff1a 在WINDOWS中又叫外壳名字空间 Shell Name Space 外壳名字空间是Windows下的标准文件系统 xff0c 它大大扩展了Dos文件系统 xff0c
  • 干货 | 想学数据分析不知道该读什么书、从哪本读,翻遍专业知识类网站最全的整理!

    作为一名工作两年的产品新人 xff0c 想学一些数据分析的知识 xff0c 推荐的书多又杂 xff0c 并且没有一个阅读顺序 xff0c 实在是不知道该怎么办才好 整理了各大网站关于学习数据分析的文章 xff0c 整理如下 xff0c 希望
  • Flutter 的野心,Google 的认真,是时候准备走一波了

    回复 1024 xff0c 送你一个特别推送 昨天身为技术圈里的人 xff0c 朋友圈都被 Flutter 刷屏了 xff0c 因为 xff1a Flutter 1 0 正式版发布了 然后知乎上就有人发问如何评价 Flutter 1 0 正
  • vue项目中子组件调用父组件函数报错“TypeError: “this.$parent.b(p)“ is not a function

    参考 xff1a 解决 vue项目中子组件调用父组件函数报错 34 TypeError 34 this parent b p is not a function xff0c 哭死我了 不错 64 的博客 CSDN博客 木有解决我的问题 xf
  • 树莓派安装宝塔面板后无法连接VNC

    解决方法 xff1a 登陆宝塔面板后台 xff0c 在 安全 中放行端口5900即可
  • linux 系统调用(二)源码分析

    本文基于linux3 10内核 1 应用层处理 在Linux下系统调用是用软中断实现的 xff0c 下面以一个简单的open例子简要分析一下应用层的open是如何调用到内核中的sys open的 在glibc库中 xff0c 通过封装例程
  • 《C++新经典Linux C++通信架构实战》第2章 进入Nginx之门

    C 43 43 新经典Linux C 43 43 通信架构实战 第2章 进入Nginx之门 2 1 Nginx简介 选择理由 安装和使用2 1 1 Nginx简介2 1 2 为什么选择Nginx2 1 3 安装Nginx xff0c 搭建W
  • 《C++新经典》第1章 C/C++语言

    C 43 43 新经典 第1章 C C 43 43 语言 C语言最突出特点 xff1a 效率高 灵活性 可以直接访问物理地址 xff08 操作硬件 xff09 xff0c 进行位运算 C 43 43 语言特性 xff1a 封装性 继承性 多
  • 《C++新经典》第8章 编译预处理

    C 43 43 新经典 第8章 编译预处理 8 1 宏定义8 1 1 无参宏定义8 1 2 带参宏定义 8 2 文件包含和条件编译8 2 1 文件包含8 2 2 条件编译 可复用代码 xff0c 实现相对独立和短小的功能 8 1 宏定义 编
  • 《C++新经典》第14章 类

    C 43 43 新经典 第14章 类 14 1 成员函数 对象复制与私有成员14 1 1 总述14 1 2 类基础14 1 3 成员函数14 1 4 对象的复制14 1 5 私有成员 14 2 构造函数 explicit与初始化列表14 2
  • 《C++新经典》第19章 STL标准模板库大局观

    C 43 43 新经典 第19章 STL标准模板库大局观 19 1 STL总述 发展史 组成与数据结构谈19 1 1 几个概念与推荐书籍19 1 2 算法和数据结构谈19 1 4 标准库使用19 1 5 STL的组成部分 19 2 容器分类
  • 《C++新经典模板与泛型编程》之第1章 C++编程环境介绍

    C 43 43 新经典模板与泛型编程 之第1章 C 43 43 编程环境介绍 1 1 C 43 43 编程环境搭建说明1 2 创建C 43 43 程序1 3 程序调试方法1 3 1 跟踪调试1 3 2 查看内存1 3 3 快速监视对话框1
  • ITSM:某省通信公司支撑系统服务管理案例

    xff08 1 xff09 公司背景 某通信公司在全国30个省 自治区 直辖市设立了300多个分公司和子公司 经营的电信业务包括移动电话 xff08 包括GSM和CDMA xff09 无线寻呼 长途电话 本地电话 数据通信 xff08 包括
  • CTO就业市场今非昔比

    CTO就业市场今非昔比 作者 xff1a ZDNet China Kforce Inc 的IT与工程部门主管Peter Woolford说 xff1a 过去 xff0c CTO这个职位是非常风光 非常诱人的 一般来说 xff0c 担任这个职
  • springboot 项目 访问不到 的处理办法

    1 xff1a 检查 64 POSTMapping中的 内容 是否存 xxxx 这样的内容 修改 xxx 即可
  • 爱情

    爱情 一哥们最近谈对象了 这家伙计算机专业 科大本科 中山硕士 电信骨干 年近三十 却一直没有女友 人很老实 整天在游戏里自得其乐 最近另一朋友实在仍不住了 就帮他撮合了一个金领女友 于是乎 这家伙现在满脸红光 连 MSN 都改名子了 xf
  • 管理启示:钓竿与钓技

    有太多人认为自己手握人生的钓竿 xff0c 鱼儿会自动上钓 殊不知各行各业的专业 xff0c 都需要长期用心精耕 xff0c 才能累积到像老人的 钓技 位子 是虚的 xff0c 能力 是实的 有位年轻人到 Career 来寻求职咨询 xff

随机推荐

  • 学习笔记?

    学习笔记 xff1f
  • 新一代电信运营商运营支撑系统中的客户服务

    一 电信运营商的运营支撑系统 随着中国电信业逐步打破垄断 xff0c 为国内的电信运营商提供了一个逐步市场化的合理竞争环境 同时 xff0c 世界经济的全球化 市场的国际化和我国加入WTO步伐的加速 xff0c 也要求国内的电信运营商在经营
  • 用SID模型系统构建支撑

    为什么要使用SID OSS BSS是电信运营商解决企业运做管理自动化 信息化 提高产品销售 xff08 业务 xff09 和客户服务质量的综合支撑系统 它的发展大致可分为面向网元及网络管理 面向业务管理 面向客户管理三个发展阶段 而现阶段的
  • 构筑面向客户的电信运营支撑系统

    一个成功的电信企业如何才能保持持续发展的能力 xff1f 虽然融资 并购 重组等体制改革是非常必要的手段 xff0c 推动电信企业运营管理能力的提升更为重要 在电信业下一轮的竞争中 xff0c 全面提升管理水平和运营能力是决定性因素 以前是
  • 思特奇BOSS:综合计费系统的设计

    及时 灵活优惠的计费是现代移动运营商一切业务活动的基础 xff0c 也是为用户提供全面高质量服务 xff0c 提高市场竞争力的出发点 所以 xff0c 思特奇的综合计费系统根据语音 数据业务 增值业务等相关业务的特征 xff0c 可以按时长
  • CIO靠业务翻身

    身为CIO的你被降级了 CEO将把你叫进他的办公室并告诉你 xff0c 经过深思熟虑 xff0c 他决定让你向CFO做报告 每个人都知道这意味着什么 xff0c IT不必再向CEO作报告了 xff0c 但事实上IT是不应该这样的 虽然IT部
  • NIST SP800系列标准

    NIST SP800系列标准 SP800是美国NIST xff08 National Institute of Standards and Technology xff09 发布的一系列关于信息安全的指南 xff08 SP是Special
  • Python一个对象如何调用基类和继承类的方法

    main 函数 先 生成一个类 TrainOptions 的对象 然后调用 类中 的 parser 方法 但是发现 TrainOptions 没有该方法 所以去它的基类 BaseOptions 中找 并且找到了 parser 方法 此时调用
  • 滤波器和图像处理

    滤波器就是一个信号波形 xff0c 从时域看是 幅度 时间 的曲线 xff0c 从频域看是由多种不同频率成分的波形合成一个波形 xff0c 滤波就是滤除不要的频率成分 保留需要的频率成分 xff1b 高通滤波就是让高频成分通过 xff0c
  • 微信PC版的缓存文件夹

    微信PC版的缓存文件夹都装了什么 我们在PC版的微信上看到的所有东西 xff0c 都是会在硬盘里留下缓存文件的 微信缓存的路径 xff0c 默认是电脑的 我的文档 文件夹 xff0c 也就是 系统盘 Users 用户名 Documents
  • Win10子系统ubuntu20.04设置静态ip、笔记

    Win10子系统ubuntu20 04设置静态ip 笔记 简单有效的方法 一个新思路 xff1a 不改IP xff0c 加一个指定IP 在 Windows 10 中 xff0c 以管理员权限运行 CMD 或 Powershell xff0c
  • win10安装wsl2 unbuntu报错,WslRegisterDistribution failed with error: 0x80070002

    Installing this may take a few minutes WslRegisterDistribution failed with error 0x80070002 Error 0x80070002 The system
  • 什么是系统调用

    系统调用 1 内核模式与用户模式 为了保护设备 xff0c 操作系统不可能让所有的程序都能轻松地访问到任何的文件 xff0c 将处理器CPU分为两种模式 xff0c 内核模式和用户模式 xff0c 诸如一些修改寄存器内容的命令 xff0c
  • 【Docker】update-ca-certificates把JAVA_HOME抹掉了?一个镜像问题(未解决)

    今天在做镜像的时候发现一个问题 maven 3 6 3 openjdk 8 镜像是 dockerhub 拉下来的 xff0c 大家可以尝试一下 xff0c 然后在 Dockerfile 里执行了一下 update ca certificat
  • Mac里捣腾Kerberos(一)

    文章目录 1 Overview2 安装3 Summary 1 Overview 最近需要解决一个部门一个老旧问题 xff0c 问题大概是这样的 xff0c Spark on K8S 在访问 HDFS xff08 其他小组负责 xff09 的
  • Qt实战开发-目录树

    关键知识点 使用QStandardItemModel 建立标准化项目模型 xff0c 对树形控件节点操作提供用于存储自定义数据的通用模型 xff0c 每个数据项被表示为类QStandardItem的对象 xff0c 类QStandardIt
  • fdisk: cannot open /dev/sdb: Permission denied

    fdisk cannot open dev sda Permission denied fdisk cannot open dev sdb Permission denied 切换root用户就好了
  • Ubuntu安装NVIDIA驱动

    本篇教程来自我在好几台服务器 43 好几台工作站上安装驱动的实践经验 会持续更新 强烈建议 xff0c 阅读完全文后再上手实操 xff01 xff01 xff01 推荐博客 xff1a How to install Nvidia drive
  • Windows2012中安装Nginx并创建为Windows服务

    安装Nginx 下载windows版nginx xff08 http nginx org download nginx 1 10 0 zip xff09 xff0c 之后解压到需要放置的位置 xff08 D xampp nginx xff0
  • 对比两个List,区分重复数据(优化)。

    1 背景 现在日常工作中经常会遇到两组数据对比碰撞的需求 xff0c 菜菜不才 xff0c 之前写了一个不怎么优雅的代码才解决了问题 xff0c 而且还是只能对比String的 xff0c 菜菜有空后赶紧写了一个比较优雅的方式解决了list