首页 > 编程语言 >Java两个集合取差集4种方式举例

Java两个集合取差集4种方式举例

时间:2024-10-29 17:02:44浏览次数:6  
标签:取差集 Java list1 元素 List list2 举例 集合

Java两个集合取差集4种方式举例

 更新时间:2024年08月03日 10:30:45   作者:只吹45°风     在Java 编程中,经常需要对集合进行一些操作,比如取两个集合的交集、并集和差集,下面这篇文章主要给大家介绍了关于Java两个集合取差集的4种方式,需要的朋友可以参考下  

Java技术迷

+
目录

开发中比较两个集合的不同点,例如需要对于两个集合取差集,下面列举了几种方式。

方式1:使用Java 8的Stream流

整个集合过滤

?
1 2 3 4 5 6 7 8 9 10 11 12 List<String> list1 = Arrays.asList("a", "b", "c", "d"); List<String> list2 = Arrays.asList("c", "d", "e", "f");   // 获取差集 List<String> difference1 = list1.stream()     .filter(element -> !list2.contains(element))     .collect(Collectors.toList());   // 获取list2中不在list1的元素 List<String> difference2 = list2.stream()     .filter(element -> !list1.contains(element))     .collect(Collectors.toList());
登录后复制免费讲解  

根据集合中对象的属性来过滤

?
1 2 3 4 5 6 7 // 根据集合中对象的name属性来过滤  public void testStreamNoneMatch(List<StudentDTO> originalDto, List<StudentDTO> newDto) {      List<StudentDTO> boy = originalDto.stream()              .filter(item -> item.getGender() == 1                      && newDto.stream().anyMatch(dto -> dto.getName().equals(item.getName()))).collect(Collectors.toList());      log.info("性别为男生,且名字相同的人员为{}", JSONObject.toJSONString(boy));  }
登录后复制免费讲解  

方式2:使用Java集合类的removeAll()方法

?
1 2 3 4 5 6 7 8 9 10 List<String> list1Copy = new ArrayList<>(list1); List<String> list2Copy = new ArrayList<>(list2);   // 获取list1中不在list2的元素 list1Copy.removeAll(list2); List<String> difference1 = list1Copy;   // 获取list2中不在list1的元素 list2Copy.removeAll(list1); List<String> difference2 = list2Copy;
登录后复制免费讲解  

方式3:使用Google Guava库的Sets.difference()方法

?
1 2 3 4 5 6 7 8 9 10 List<String> list1 = ...;   List<String> list2 = ...;     // 获取list1中不在list2的元素   Set<String> set1 = Sets.newHashSet(list1);   Set<String> set2 = Sets.newHashSet(list2);   Set<String> difference1 = Sets.difference(set1, set2);     // 获取list2中不在list1的元素   Set<String> difference2 = Sets.difference(set2, set1);
登录后复制免费讲解  

方式4:使用Apache Commons Collections的ListUtils.subtract()方法

?
1 2 3 4 5 6 7 8 List<String> list1 = ...; List<String> list2 = ...;   // 获取list1中不在list2的元素 List<String> difference1 = ListUtils.subtract(list1, list2);   // 获取list2中不在list1的元素 List<String> difference2 = ListUtils.subtract(list2, list1);
登录后复制免费讲解  

注意:方式有很多,大家可根据项目需求和已引入的库,选择合适的方法来计算集合的差集。

附:取重复元素

方法一:使用HashSet

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set;   public class ListUtils {     /**      * 找出两个List中的重复元素      * @param list1 第一个List      * @param list2 第二个List      * @return 重复的元素集合      */     public static <T> List<T> findDuplicateElements(List<T> list1, List<T> list2) {         Set<T> set1 = new HashSet<>(list1); // 将List1转换为Set,去除重复元素         Set<T> duplicateSet = new HashSet<>();                   for (T element : list2) { // 遍历List2的元素             if (set1.contains(element)) { // 如果Set1中包含List2的元素                 duplicateSet.add(element); // 将重复的元素添加到重复元素的Set中             }         }                   return new ArrayList<>(duplicateSet); // 将重复元素的Set转换回List并返回     } }
登录后复制免费讲解  

方法二:使用Stream API

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import java.util.*; import java.util.stream.Collectors; public class Main {     public static void main(String[] args) {         List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);         List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);         // 将列表转换为Stream         Stream<Integer> stream1 = list1.stream();         Stream<Integer> stream2 = list2.stream();         // 找出两个Stream的重复元素         List<Integer> commonElements = Stream.concat(stream1, stream2)                                              .distinct()                                              .collect(Collectors.toList());         // 打印出重复元素         System.out.println(commonElements);     } }
登录后复制免费讲解  

方法三:使用HashMap

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import java.util.*; public class Main {     public static void main(String[] args) {         List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);         List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);         // 将列表转换为HashMap         Map<Integer, Integer> map = new HashMap<>();         list1.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1));         list2.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1));         // 找出HashMap中值大于1的键,即为重复元素         List<Integer> commonElements = map.entrySet().stream()                                          .filter(x -> x.getValue() > 1)                                          .map(Map.Entry::getKey)                                          .collect(Collectors.toList());         // 打印出重复元素         System.out.println(commonElements);     } }
登录后复制免费讲解  

总结

到此这篇关于Java两个集合取差集4种方式的文章就介绍到这了,更多相关Java两个集合取差集内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章: 蓄力AI  

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/weixin_43834477/article/details/139087326

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 [email protected] 进行投诉反馈,一经查实,立即处理!

相关文章

  • Spring和MyBatis整合自动生成代码里面text类型遇到的坑

    Spring和MyBatis整合自动生成代码里面text类型遇到的坑

    Spring和MyBatis整合以后,使用自动生成代码工具生成dao和mapper配置文件。下面通过本文给大家介绍Spring和MyBatis整合自动生成代码里面text类型遇到的坑,需要的朋友参考下吧 2018-01-01
  • maven repository详解

    maven repository详解

    这篇文章主要介绍了maven repository的相关知识,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 2023-05-05
  • Maven镜像地址配置示例大全

    Maven镜像地址配置示例大全

    这篇文章主要介绍了Maven镜像地址配置示例大全,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2020-06-06
  • SpringCloud断路器Hystrix原理及用法解析

    SpringCloud断路器Hystrix原理及用法解析

    这篇文章主要介绍了SpringCloud断路器Hystrix原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 2020-01-01
  • java集合继承关系图分享

    java集合继承关系图分享

    这篇文章主要为大家详细介绍了java集合继承关系图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-11-11
  • Java中方法的重载与重写举例比较

    Java中方法的重载与重写举例比较

    这篇文章主要给大家介绍了关于Java中方法的重载与重写的相关资料,Java中的方法重载和重写是面向对象编程中的两个重要概念,文中介绍的非常详细,需要的朋友可以参考下 2023-07-07
  • Java中的反射机制基本运用详解

    Java中的反射机制基本运用详解

    这篇文章主要介绍了Java 反射机制原理与用法,结合实例形式详细分析了Java反射机制的相关概念、原理、基本使用方法及操作注意事项,需要的朋友可以参考下 2021-08-08
  • Java实现上传网络图片到七牛云存储详解

    Java实现上传网络图片到七牛云存储详解

    这篇文章主要为大家详细介绍了Java如何实现上传网络图片到七牛云存储,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下 2022-12-12
  • springboot aop添加日志方式

    springboot aop添加日志方式

    这篇文章主要介绍了springboot aop添加日志方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教 2024-05-05
  • Springboot-注解-操作日志的实现方式

    Springboot-注解-操作日志的实现方式

    这篇文章主要介绍了Springboot-注解-操作日志的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 2021-03-03

最新评论

标签:取差集,Java,list1,元素,List,list2,举例,集合
From: https://www.cnblogs.com/pqdl4312/p/18513892

相关文章

  • javaCV图片OCR文字识别
    springboot项目pom文件中添加以下依赖 1<dependency>2<groupId>org.bytedeco</groupId>3<artifactId>javacv-platform</artifactId>4<version>1.5.5</version>5</depend......
  • java计算机毕业设计作业管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,教育领域也在不断探索和应用新技术,以提高教学质量和管理效率。传统的作业管理方式通常依赖于纸质媒介和面对面的交流,这种方式......
  • java 基础 实训第七天
    Java(OOP)其他知识1、static(静态)      被static修饰的成员(属性,方法),称为静态成员也叫类成员。他们是在类加载时完成   初始化。而且静态成员可以在没有创建对象时直接通过类就可以访问。      类成员也属于所有对象共享的成员。      静态变......
  • JAVA对于图片的花式操作(不定期更新)
    JAVA对于图片的花式操作(不定期更新)MultipartFile转Base64字符串图片url转Base64字符串图片url转MultipartFile图片url转File流base64图片压缩引入依赖代码编写抠图MultipartFile转Base64字符串/***MultipartFile文件转bash64字符串**@parammult......
  • Java 23 新特性一览 + Java 24 新动态抢先看
    最近Oracle发布了Java编程语言和虚拟机的最新版本:Java23。作为Java21之后的第二个非LTS版本,该如果你还没了解过,那就一起了解一下吧(内含赠书)。最后,我们再一起看看Java24新动态。Java23 新特性通过ProjectAmber提供的语言特性JEP455:PrimitiveTypesinPatterns,i......
  • Java 中的类型推断是如何工作的?_2
    在Java中,类型推断是编译时进行的过程,它可以自动推导出表达式的类型、减少代码冗余及增强可读性。Java的类型推断通过以下方式工作:自动推导泛型参数类型、省略冗余类型信息、简化Lambda表达式的编写。特别是在Java8及以后的版本中,类型推断的特性得到了极大加强。单独展开描述,自动......
  • java计算机毕业设计翰明教育教学管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着教育事业的不断发展,学校规模的扩大以及教育管理要求的日益提高,传统的教育教学管理方式已经难以满足需求。在当今数字化时代,教育领域也迫切需......
  • 【java】RSA前后端互通
    后端importjavax.crypto.Cipher;importjava.security.KeyFactory;importjava.security.PrivateKey;importjava.security.PublicKey;importjava.security.spec.PKCS8EncodedKeySpec;importjava.security.spec.X509EncodedKeySpec;importjava.util.Base64;publi......
  • 异常处理汇总-Java&Mendix&Spark&SQL&etc...
    1.MyBatis映射问题执行计算过程中出现错误,错误消息:MappedStatementscollectiondoesnotcontainvaluefor... 问题原因:configure.xml文件中未配置对应路径。2. java:Annotationprocessingisnotsupportedformodulecycles.Pleaseensurethatallmodulesfrom......
  • 机票电子行程单如何批量查验?Java机票电子行程单查验接口示例
    机票电子行程单来了,它方便了人们的出行。现如今,随着旅游、差旅市场的回暖与线上业务的蓬勃发展,机票电子行程单的需求量急剧攀升,如何高效且准确地查验这些电子行程单成为许多企业和财务部门关注的焦点。传统的人工查验流程耗时且易出错,尤其在行程单数量巨大的情况下,费时费力。......