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

相关文章
|
11天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
21 2
|
11天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
16天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
16天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
16天前
|
Java 开发者
|
15天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
12 0
|
20天前
|
Java API Apache
java集合的组内平均值怎么计算
通过本文的介绍,我们了解了在Java中计算集合的组内平均值的几种方法。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。无论是使用传统的循环方法,还是利用Java 8的Stream API,亦或是使用第三方库(如Apache Commons Collections和Guava),都可以有效地计算集合的组内平均值。希望本文对您理解和实现Java中的集合平均值计算有所帮助。
24 0
|
Java
Java8中stream流处理数据21个小案例(学习使用)
Java8中stream流处理数据21个小案例(学习使用)
96 0
|
SQL 存储 前端开发
【Java技术指南】「Java8技术盲区」在奔向Java13的同时,也让我们仔细研究一下Stream的学习认知!
【Java技术指南】「Java8技术盲区」在奔向Java13的同时,也让我们仔细研究一下Stream的学习认知!
141 0
【Java技术指南】「Java8技术盲区」在奔向Java13的同时,也让我们仔细研究一下Stream的学习认知!
|
Java 程序员 API
Java 8 Stream API学习总结
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
1033 0
下一篇
无影云桌面