两个集合取交集、并集、差集

两个集合取交集、并集、差集MySQL 中可以使用 INNERJOIN UNION 和 MINUS 或 EXCEPT 来分别获取两个集合的交集 并集和差集

1.1 简述

有一个小需求,需要将两个集合中的素求差集,这也是花了我不少功夫。现将集合常见的交集、并集、差集一些操作整理出来,有需要的小伙伴可以参考。

1.2 示例详解

1.2.1 使用JDK8自带的新特性

我们都知道JDK8对于我们日常开发起到了很大的遍历,特别是提供了函数式编程,以及对应的Stream等。Java8 lambda表达式流操作不影响原始list对象,所以这也是我们在日常开发当中常常使用的方式。

1.2.1.1 对象类型处理
 List<Student> list1 = new ArrayList<>(); list1.add(new Student("name100","100")); list1.add(new Student("name102","102")); list1.add(new Student("name103","103")); List<Student> list2 = new ArrayList<>(); list2.add(new Student("name103","103")); list2.add(new Student("name104","104")); Set<Student> set1 = new HashSet<>(list1); Set<Student> set2 = new HashSet<>(list2); 
  • 交集
List<Student> intersection = list1.stream().filter(set2::contains).collect(toList()); System.out.println("---得到交集 intersection---"); intersection.parallelStream().forEach(System.out::println); 
  • 差集(list1--->list2
List<Student> reduce1 = list1.stream().filter(item -> !set2.contains(item)).collect(toList()); System.out.println("---得到差集 reduce1 (list1 - list2)---"); reduce1.parallelStream().forEach(System.out::println); 
  • 差集(list2--->list1
List<Student> reduce2 = list2.stream().filter(item -> !set1.contains(item)).collect(toList()); System.out.println("---得到差集 reduce2 (list2 - list1)---"); reduce2.parallelStream().forEach(System.out::println); 
  • 并集
List<Student> listAll = list1.parallelStream().collect(toList()); List<Student> listAll2 = list2.parallelStream().collect(toList()); listAll.addAll(listAll2); System.out.println("---得到并集 listAll---"); listAll.parallelStream().forEach(System.out::println); 
  • 去重并集
set1.addAll(set2); List<Student> listDistinctAll = new ArrayList<>(set1); System.out.println("---得到去重并集 listDistinctAll---"); listDistinctAll.parallelStream().forEach(System.out::println); 
1.2.1.2 简单类型的处理
List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3"); List<String> list2 = new ArrayList<>(); list2.add("3"); list2.add("4"); Set<String> set1 = new HashSet<>(list1); Set<String> set2 = new HashSet<>(list2); 
  • 交集
List<String> intersection = list1.stream().filter(set2::contains).collect(toList()); System.out.println("---得到交集 intersection---"); intersection.parallelStream().forEach(System.out::println); 
  • 差集(list1 - list2)
List<String> reduce1 = list1.stream().filter(item -> !set2.contains(item)).collect(toList()); System.out.println("---得到差集 reduce1 (list1 - list2)---"); reduce1.parallelStream().forEach(System.out::println); 
  • 差集(list2 - list1)
List<String> reduce2 = list2.stream().filter(item -> !set1.contains(item)).collect(toList()); System.out.println("---得到差集 reduce2 (list2 - list1)---"); reduce2.parallelStream().forEach(System.out::println); 
  • 并集
List<String> listAll = list1.parallelStream().collect(toList()); List<String> listAll2 = list2.parallelStream().collect(toList()); listAll.addAll(listAll2); System.out.println("---得到并集 listAll---"); listAll.parallelStream().forEach(System.out::println); 
  • 去重并集
set1.addAll(set2); List<String> listDistinctAll = new ArrayList<>(set1); System.out.println("---得到去重并集 listDistinctAll---"); listDistinctAll.parallelStream().forEach(System.out::println); 

1.2.2 利用ArrayList自带的方法

List<String> list1 = new ArrayList<String>(); list1.add("1"); list1.add("2"); List<String> list2 = new ArrayList<String>(); list2.add("2"); list2.add("3"); 
  • 差集(List1中有的但是List2中没有的素)
 list1.removeAll(list2); System.out.println(list1); 
  • 并集(不去重)
 list1.addAll(list2); System.out.println(list1); 
  • 并集(去重)
 list1.removeAll(list2); list1.addAll(list2); System.out.println(list1); 
  • 交集
list1.retainAll(list2); System.out.println(list1); 
今天的文章 两个集合取交集、并集、差集分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-04 16:11
下一篇 2025-01-04 16:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/101546.html