java获取两个集合的交集,并集,差集,去重复并集

不念不忘少年蓝@ 2023-10-05 19:08 78阅读 0赞

一.利用java8的新特性
java8 lambda表达式流操作不影响原始list对象;

  1. 对象类型处理
  1. List<Student> list1 = new ArrayList<>();
  2. list1.add(new Student("name100","100"));
  3. list1.add(new Student("name102","102"));
  4. list1.add(new Student("name103","103"));
  5. List<Student> list2 = new ArrayList<>();
  6. list2.add(new Student("name103","103"));
  7. list2.add(new Student("name104","104"));
  8. Set<Student> set1 = new HashSet<>(list1);
  9. Set<Student> set2 = new HashSet<>(list2);
  10. 1).交集
  11. List<Student> intersection = list1.stream().filter(set2::contains).collect(toList());
  12. System.out.println("---得到交集 intersection---");
  13. intersection.parallelStream().forEach(System.out::println);
  14. 2).差集(list1--->list2
  15. List<Student> reduce1 = list1.stream().filter(item -> !set2.contains(item)).collect(toList());
  16. System.out.println("---得到差集 reduce1 (list1 - list2)---");
  17. reduce1.parallelStream().forEach(System.out::println);
  18. 3).差集(list2--->list1
  19. List<Student> reduce2 = list2.stream().filter(item -> !set1.contains(item)).collect(toList());
  20. System.out.println("---得到差集 reduce2 (list2 - list1)---");
  21. reduce2.parallelStream().forEach(System.out::println);
  22. 4).并集
  23. List<Student> listAll = list1.parallelStream().collect(toList());
  24. List<Student> listAll2 = list2.parallelStream().collect(toList());
  25. listAll.addAll(listAll2);
  26. System.out.println("---得到并集 listAll---");
  27. listAll.parallelStream().forEach(System.out::println);
  28. 5).去重并集
  29. set1.addAll(set2);
  30. List<Student> listDistinctAll = new ArrayList<>(set1);
  31. System.out.println("---得到去重并集 listDistinctAll---");
  32. listDistinctAll.parallelStream().forEach(System.out::println);
  1. 简单类型的处理
  1. List<String> list1 = new ArrayList<>();
  2. list1.add("1");
  3. list1.add("2");
  4. list1.add("3");
  5. List<String> list2 = new ArrayList<>();
  6. list2.add("3");
  7. list2.add("4");
  8. Set<String> set1 = new HashSet<>(list1);
  9. Set<String> set2 = new HashSet<>(list2);
  10. 1).交集
  11. List<String> intersection = list1.stream().filter(set2::contains).collect(toList());
  12. System.out.println("---得到交集 intersection---");
  13. intersection.parallelStream().forEach(System.out::println);
  14. 2).差集(list1 - list2)
  15. List<String> reduce1 = list1.stream().filter(item -> !set2.contains(item)).collect(toList());
  16. System.out.println("---得到差集 reduce1 (list1 - list2)---");
  17. reduce1.parallelStream().forEach(System.out::println);
  18. 3).差集(list2 - list1)
  19. List<String> reduce2 = list2.stream().filter(item -> !set1.contains(item)).collect(toList());
  20. System.out.println("---得到差集 reduce2 (list2 - list1)---");
  21. reduce2.parallelStream().forEach(System.out::println);
  22. 4).并集
  23. List<String> listAll = list1.parallelStream().collect(toList());
  24. List<String> listAll2 = list2.parallelStream().collect(toList());
  25. listAll.addAll(listAll2);
  26. System.out.println("---得到并集 listAll---");
  27. listAll.parallelStream().forEach(System.out::println);
  28. 5).去重并集
  29. set1.addAll(set2);
  30. List<String> listDistinctAll = new ArrayList<>(set1);
  31. System.out.println("---得到去重并集 listDistinctAll---");
  32. listDistinctAll.parallelStream().forEach(System.out::println);

二.利用ArrayList自带的方法

  1. List<String> list1 = new ArrayList<String>();
  2. list1.add("1");
  3. list1.add("2");
  4. List<String> list2 = new ArrayList<String>();
  5. list2.add("2");
  6. list2.add("3");
  7. 1). 差集(List1中有的但是List2中没有的元素)
  8. list1.removeAll(list2);
  9. System.out.println(list1);
  10. 2). 并集(不去重)
  11. list1.addAll(list2);
  12. System.out.println(list1);
  13. 3). 并集(去重)
  14. list1.removeAll(list2);
  15. list1.addAll(list2);
  16. System.out.println(list1);
  17. 4). 交集
  18. list1.retainAll(list2);
  19. System.out.println(list1);

发表评论

表情:
评论列表 (有 0 条评论,78人围观)

还没有评论,来说两句吧...

相关阅读