Java8两个List集合取交集、并集、差集、去重并集

Stream API :用于对集合元素进行各种操作,如过滤、映射、排序等。
Set :不包含重复元素的集合。
List:有序的元素集合,允许有重复元素。

java 复制代码
package com.example.demo;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Test 测试
 *
 * @author Administrator
 * @version 2024/08/19 13:39
 **/
public class Test {
    public static void main(String[] args) {
        List<String> list1 = Arrays.asList("apple", "banana", "cherry", "date");
        List<String> list2 = Arrays.asList("banana", "date", "fig", "grape");

        // 交集
        List<String> intersection = findIntersection(list1, list2);
        System.out.println("Intersection: " + intersection);

        // 并集
        List<String> union = findUnion(list1, list2);
        System.out.println("Union: " + union);

        // 差集 (list1 - list2)
        List<String> difference = findDifference(list1, list2);
        System.out.println("Difference (list1 - list2): " + difference);

        // 去重后的并集
        List<String> uniqueUnion = findUniqueUnion(list1, list2);
        System.out.println("Unique Union: " + uniqueUnion);
    }

    private static List<String> findIntersection(List<String> list1, List<String> list2) {
        Set<String> set1 = new HashSet<>(list1);
        return list2.stream()
                .filter(set1::contains)
                .collect(Collectors.toList());
    }

    private static List<String> findUnion(List<String> list1, List<String> list2) {
        Set<String> set1 = new HashSet<>(list1);
        set1.addAll(list2);
        return new ArrayList<>(set1);
    }

    private static List<String> findDifference(List<String> list1, List<String> list2) {
        Set<String> set1 = new HashSet<>(list1);
        set1.removeAll(new HashSet<>(list2));
        return new ArrayList<>(set1);
    }

    private static List<String> findUniqueUnion(List<String> list1, List<String> list2) {
        return Stream.concat(list1.stream(), list2.stream())
                .distinct()
                .collect(Collectors.toList());
    }
}

交集 (findIntersection): 使用HashSet快速检查元素是否存在于另一个集合中。

并集 (findUnion): 将两个List转换为Set以自动去除重复元素,然后将它们合并。

差集 (findDifference): 从第一个集合中移除第二个集合中的所有元素。

去重后的并集 (findUniqueUnion): 将两个列表合并成一个流,使用distinct()方法去除重复项。

相关推荐
旺仔老馒头.2 小时前
【数据结构与算法】手撕排序算法(二)
c语言·数据结构·算法·排序算法
努力努力再努力wz2 小时前
【Linux进阶系列】:线程(上)
java·linux·运维·服务器·数据结构·c++·redis
czhc11400756632 小时前
Java117 最长公共前缀
java·数据结构·算法
吃着火锅x唱着歌3 小时前
LeetCode 2016.增量元素之间的最大差值
数据结构·算法·leetcode
西岭千秋雪_4 小时前
Zookeeper数据结构
java·数据结构·分布式·zookeeper
qk学算法5 小时前
力扣滑动窗口题目-76最小覆盖子串&&1234替换子串得到平衡字符串
数据结构·算法·leetcode
还是码字踏实5 小时前
基础数据结构之数组的矩阵遍历:螺旋矩阵(LeetCode 54 中等题)
数据结构·leetcode·矩阵·螺旋矩阵
TitosZhang7 小时前
排序算法稳定性判断
数据结构·算法·排序算法
刘恒1234567898 小时前
Windows 10 docker 配置(PHP+Nginx+Mysql)(thinkphp5项目)环境
windows·docker·php
周杰伦_Jay8 小时前
【Python后端API开发对比】FastAPI、主流框架Flask、Django REST Framework(DRF)及高性能框架Tornado
数据结构·人工智能·python·django·flask·fastapi·tornado