Java 查找两个有复杂对象的集合中的不同元素和相同的元素

简介: Java 查找两个有复杂对象的集合中的不同元素和相同的元素

1、定义一个测试对象RolePerm

public class RolePerm{
    private Long rid;
    private Long pid;
    public void setRid(Long rid){
        this.rid=rid;
    }
    public Long getRid(){
        return rid;
    }
    public void setPid(Long pid){
        this.pid=pid;
    }
    public Long getPid(){
        return pid;
    }
    /**
     *重写hashCode,方便集合的操作
     */
    @Override
    public int hashCode() {
        return (int) (this.pid+this.rid);
    }
    /**
     *重写equals,只有pid和rid都相等,才认为这个对象是想等的
     */
    @Override
    public boolean equals(Object obj) {
        if(!(obj instanceof RolePerm)){
            return false;
        }
        RolePermrp = (RolePerm) obj;
        return (this.pid == rp.pid) && (this.rid == rp.rid);
    }
}

2、提取两个集合中的不同元素和相同的元素

/**
 * 获取两个集合不同
 * @param rps1  rps1数据
 * @param rps2  rps2数据
 * @return  0:rps1中独有的数据;1:交集的数据;2:rps2中的独有数据
 */
private Map<Integer, List<RolePerm>> findListDiff(List<RolePerm> rps1,List<RolePerm> rps2){
    //判断不能为空
    if(rps1 == null || rps1.isEmpty() || rps2 == null || rps1.isEmpty()) return null;
    //保存最后的数据
    Map<Integer, List<RolePerm>>  mapList = new HashMap<Integer, List<RolePerm>>(3);
    //复制rps1,作为备份
    List<RolePerm> rps1_bak = new ArrayList<RolePerm>(rps1);
    //1、获取rps1中与rps2中不同的元素
    rps1.removeAll(rps2);
    //2、获取rps1和rps2中相同的元素
    rps1_bak.removeAll(rps1);
    //3、获取rps2中与rps1中不同的元素
    rps2.removeAll(rps1_bak);
    //经过此转换后rps1中数据与rps2中的数据完全不同
    //rps1_bak是rps1和rps2的交集
    //rps2中的数据与rps1中的数据完全不同
    mapList.put(0, rps1);//rps1中独有的数据
    mapList.put(1, rps1_bak);//交集的数据
    mapList.put(2, rps2);//rps2中的独有数据
    return mapList;
}

相关文章
|
3月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
176 3
|
2月前
|
Oracle Java 关系型数据库
掌握Java Stream API:高效集合处理的利器
掌握Java Stream API:高效集合处理的利器
329 80
|
2月前
|
安全 Java API
Java 8 Stream API:高效集合处理的利器
Java 8 Stream API:高效集合处理的利器
220 83
|
2月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
124 1
|
2月前
|
存储 缓存 NoSQL
java 集合入门基础理论的核心概念与实用长尾知识
本文介绍了Java集合框架的基础理论知识,包括单列集合(List、Set、Queue)和双列集合(Map)的特点及常用实现类(如ArrayList、HashSet、HashMap等)。详细讲解了集合的遍历方式(迭代器、增强for循环、Lambda表达式)和典型应用场景(如数据去重、键值存储等)。通过具体代码示例,帮助初学者理解集合框架的核心概念和实际应用,为Java编程中的数据存储与管理提供基础指导。
71 0
|
2月前
|
安全 Java API
Java 集合高级应用与实战技巧之高效运用方法及实战案例解析
本课程深入讲解Java集合的高级应用与实战技巧,涵盖Stream API、并行处理、Optional类、现代化Map操作、不可变集合、异步处理及高级排序等核心内容,结合丰富示例,助你掌握Java集合的高效运用,提升代码质量与开发效率。
180 0
|
2月前
|
存储 安全 Java
Java 学习路线 35 掌握 List 集合从入门到精通的 List 集合核心知识
本文详细解析Java中List集合的原理、常用实现类(如ArrayList、LinkedList)、核心方法及遍历方式,并结合数据去重、排序等实际应用场景,帮助开发者掌握List在不同业务场景下的高效使用,提升Java编程能力。
277 0
|
3月前
|
安全 Java API
Java最新技术(JDK 11+) 及以上 Java 最新技术之集合框架实操应用详解
本示例基于Java最新技术(JDK 11+),涵盖集合框架的核心功能,结合Java 8+特性(如Stream API、Lambda表达式)与并发编程最佳实践。内容包括:List操作(初始化、Lambda过滤、Stream处理)、Map操作(流式过滤、ConcurrentHashMap原子操作、并行流)、Set操作(TreeSet排序、CopyOnWriteArraySet并发安全)、Queue/Deque操作(优先队列、双端队列)以及高级聚合操作(集合转换、分组统计、平均值计算)。 [代码下载](https://pan.quark.cn/s/14fcf913bae6)
69 4
|
3月前
|
存储 缓存 安全
Java 集合容器常见面试题及详细解析
本文全面解析Java集合框架,涵盖基础概念、常见接口与类的特点及区别、底层数据结构、线程安全等内容。通过实例讲解List(如ArrayList、LinkedList)、Set(如HashSet、TreeSet)、Map(如HashMap、TreeMap)等核心组件,帮助读者深入理解集合容器的使用场景与性能优化。适合准备面试或提升开发技能的开发者阅读。
52 0