Java Stream处理2个List集合取交集、并集、差集

简介: Java Stream处理2个List集合取交集、并集、差集

package com.example.demo;

import java.util.ArrayList;
import java.util.List;

import static java.util.stream.Collectors.toList;

/**

  • @author xuezj
  • @date 2022/8/10 16:38
    */
    public class Test {

    public static void main(String[] args) {

     List<String> list1 = new ArrayList<>();
     list1.add("1");
     list1.add("2");
     list1.add("3");
     list1.add("5");
     list1.add("6");
    
     List<String> list2 = new ArrayList<>();
     list2.add("2");
     list2.add("3");
     list2.add("7");
     list2.add("8");
    
     System.out.print("List1-->");
     list1.parallelStream().forEachOrdered(System.out::print);
     System.out.println();
    
     System.out.print("List2-->");
     list2.parallelStream().forEachOrdered(System.out::print);
     System.out.println();
    
     // 交集
     List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(toList());
     System.out.print("交集-->");
     intersection.parallelStream().forEach(System.out::print);
     System.out.println();
    
     // 差集 (list1 - list2)
     List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(toList());
     System.out.print("差集(list1 - list2)-->");
     reduce1.parallelStream().forEach(System.out::print);
     System.out.println();
    
     // 差集 (list2 - list1)
     List<String> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(toList());
     System.out.print("差集(list2 - list1)-->");
     reduce2.parallelStream().forEach(System.out::print);
     System.out.println();
    
     // 并集
     List<String> listAll = list1.parallelStream().collect(toList());
     List<String> listAll2 = list2.parallelStream().collect(toList());
     listAll.addAll(listAll2);
     System.out.print("并集-->");
     listAll.parallelStream().forEachOrdered(System.out::print);
     System.out.println();
    
     // 去重并集
     List<String> listAllDistinct = listAll.stream().distinct().collect(toList());
     System.out.print("并集去重-->");
     listAllDistinct.parallelStream().forEachOrdered(System.out::print);
    

    }
    }
    输出结果:
    List1-->12356
    List2-->2378
    交集-->32
    差集(list1 - list2)-->561
    差集(list2 - list1)-->87
    并集-->123562378
    并集去重-->1235678

相关文章
|
4月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
99 5
|
4月前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
91 3
|
4月前
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
49 1
|
3月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
62 0
|
4月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
47 3
|
5月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
35 3
|
8月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1120 1
|
7月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
7月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
7月前
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法