集合并集交集差集【工具类】

一、使用Stream流进行处理

在Java开发中,对于集合的操作是非常常见的,特别是交集、并集和差集这样的操作。这些操作可以通过Java 8中的Stream API来实现。

•交集:取两个集合中相同的部分。例如,如果我们有两个List集合:list1和list2,我们可以使用list1.stream().filter(list2::contains).collect(Collectors.toList())来获取它们的交集。

•并集:将两个集合合并为一个集合。同样使用Stream API,我们可以使用Stream.concat(list1.stream(), list2.stream()).collect(Collectors.toList())来得到两个集合的并集。此外,还可以通过先将两个集合合并,然后使用distinct()方法去重,最后将结果收集到一个新的集合中来获得并集。

•差集:取两个集合中不相同的部分。例如,使用list1.stream().filter(item -> !list2.contains(item)).collect(toList())可以获取list1相对于list2的差集。同样地,我们也可以获取list2相对于list1的差集。

二、使用commons包处理

推荐使用封装后的工具类进行处理,代码如下所示:

java 复制代码
import org.apache.commons.collections.CollectionUtils;
import java.util.List;

/**
 * 集合 并集 交集 差集
 * @param <T>
 */
public class CollectionHigherOrderUtils<T> {

    /**
     * 获取两个列表的并集
     *
     * @param list  第一个列表
     * @param list2 第二个列表
     * @return 两个列表的并集,如果任一列表为null,则返回null
     */
    public static <T> List<T> unionList(List<T> list, List<T> list2) {
        if (list == null || list2 == null) {
            return null; // 或者你可以返回一个空的列表
        }
        return (List<T>) CollectionUtils.union(list, list2);
    }

    /**
     * 获取两个列表的交集
     *
     * @param list  第一个列表
     * @param list2 第二个列表
     * @return 两个列表的交集,如果任一列表为null,则返回null
     */
    public static <T> List<T> intersectionList(List<T> list, List<T> list2) {
        if (list == null || list2 == null) {
            return null; // 或者你可以返回一个空的列表
        }
        return (List<T>) CollectionUtils.intersection(list, list2);
    }

    /**
     * 获取两个列表的对称差集(即只在一个列表中出现的元素)
     *
     * @param list  第一个列表
     * @param list2 第二个列表
     * @return 两个列表的对称差集,如果任一列表为null,则返回null
     */
    public static <T> List<T> symmetricDifferenceList(List<T> list, List<T> list2) {
        if (list == null || list2 == null) {
            return null; // 或者你可以返回一个空的列表
        }
        return (List<T>) CollectionUtils.disjunction(list, list2);
    }

    /**
     * 获取第一个列表中存在但第二个列表中不存在的元素(即差集)
     *
     * @param list  第一个列表
     * @param list2 第二个列表
     * @return 第一个列表的差集,如果任一列表为null,则返回null
     */
    public static <T> List<T> subtractList(List<T> list, List<T> list2) {
        if (list == null || list2 == null) {
            return null; // 或者你可以返回一个空的列表
        }
        return (List<T>) CollectionUtils.subtract(list, list2);
    }
}
相关推荐
xcl092510 分钟前
民宿预约系统开发实战:从需求分析到上线部署全流程解析
java·spring boot
步行cgn23 分钟前
为何以继承方式引入SpringBoot
java·spring boot·后端
CoderYanger24 分钟前
A.每日一题:1140. 石子游戏 II
java·程序人生·算法·leetcode·游戏·职场和发展·深度优先
禾高网络26 分钟前
养老系统开发:背景、架构与养老行业展望
java·大数据·人工智能·小程序·架构
CCYe、1 小时前
新模型上线、旧模型下线:企业AI网关如何管住模型版本
java·网络·数据库·人工智能
风筝在晴天搁浅1 小时前
解题代码清爽版
java·开发语言
NeverFear7921 小时前
【黑马点评】短信登录
java·redis·tomcat·intellij-idea
2601_962298672 小时前
正则表达式引擎 哪些
java·python·perl·pcre·正则表达式引擎
孙克旭_2 小时前
JVM 入门详解:JVM、JRE、JDK 区别,JVM 基础结构梳理
java·开发语言·jvm
随遇而安zx2 小时前
【地基篇】---JVM 内存结构知识点(Java 8 运行时数据区深度解析)
java·开发语言·jvm