首页 > 其他分享 >比较集合

比较集合

时间:2024-11-09 13:58:47浏览次数:1  
标签:existNewElements List oldCollection 集合 new existOldElements 比较 newCollection

点击查看代码

import lombok.Getter;

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

public class CollectionUtils {

    /**
     * compare
     * @param newCollection 新集合 
     * @param oldCollection 旧集合 
     * @param comparator    
     * @param <T>
     * @return
     */
    public static <T> CompareResult<T> compare(List<T> newCollection, List<T> oldCollection, Comparator<T> comparator) {
        List<T> existNewElements = new ArrayList<>();
        List<T> existOldElements = new ArrayList<>();
        Iterator<T> newIterator = newCollection.iterator();
        while (newIterator.hasNext()) {
            T newObj = newIterator.next();
            Iterator<T> oldIterator = oldCollection.iterator();
            while (oldIterator.hasNext()) {
                T oldObj = oldIterator.next();
                if (comparator.compare(newObj, oldObj) == 0) {
                    existNewElements.add(newObj);
                    existOldElements.add(oldObj);
                    try {
                        oldIterator.remove();
                        newIterator.remove();
                    } catch (UnsupportedOperationException e) {
                        throw new RuntimeException("");
                    }
                }
            }
        }
        return new CompareResult<T>(newCollection, oldCollection, existNewElements, existOldElements);
    }

    @Getter
    public static class CompareResult<T> {
      
        private final List<T> addElements;
       
        private final List<T> deleteElements;
        
        private final List<T> existNewElements;
        
        private final List<T> existOldElements;

        public CompareResult(List<T> addElements, List<T> delValue, List<T> existNewElements, List<T> existOldElements) {
            this.addElements = addElements;
            this.deleteElements = delValue;
            this.existNewElements = existNewElements;
            this.existOldElements = existOldElements;
        }
    }

    public static void main(String[] args) {
       
        List<User> newCollection = new ArrayList<>(Arrays.asList(user2_new, user3));
        List<User> oldCollection = new ArrayList<>(Arrays.asList(user1, user2));

        System.out.println("newCollection:    " + newCollection);
        System.out.println("oldCollection:    " + oldCollection);

        CompareResult<User> compareResult = compare(newCollection, oldCollection, (o1, o2) -> {
            if (o1.getId().equals(o2.getId())) {
                return 0;
            } else {
                return -1;
            }
        });

        System.err.println("addElements:      " + compareResult.getAddElements());
        System.err.println("deleteElements:   " + compareResult.getDeleteElements());
        System.err.println("existNewElements: " + compareResult.getExistNewElements());
        System.err.println("existOldElements: " + compareResult.getExistOldElements());
    }
}

标签:existNewElements,List,oldCollection,集合,new,existOldElements,比较,newCollection
From: https://www.cnblogs.com/SetariaViridis/p/18536719

相关文章

  • Beyond Compare 5 比较文本文件时,如何忽略字母的大小写差异?
    在BeyondCompare5中实现忽略字母大小写功能,可以按照以下步骤操作:打开文本比较会话:启动BeyondCompare5软件,单击主页面右侧“文本比较”会话图标,打开会话操作界面。单击界面内“打开文件”按钮,浏览并挑选需要比较的文本文件。此时,可能会看到因字母大小写不同而......
  • python篇:0基础带你入门python之元组集合字典
    一、元组Python中的元组(`tuple`)是一种有序、不可变的集合数据类型。与列表(`list`)类似,元组用于存储多个元素,但一旦创建,它的内容不能修改。元组使用圆括号`()`来定义。1.元组的定义元组可以通过圆括号`()`来定义,也可以省略括号,直接通过逗号分隔元素。示例:#使用圆括......
  • list集合distinctby的使用
    最近使用集合的distinctby根据元素的某个属性进行过滤,但是最后的结果是需要有序的,所以想知道过滤后的顺序会不会改变。如何使用官方文档:根据指定的键选择器函数返回序列中的不同元素我的理解:根据指定的属性去重代码:varlista=newList<People>();lista.Add(newPeople()......
  • EXCEL表格内容差异比较
    此代码是将两个相同结构的EXCEL表格内容差异的比较,并作标记内容差异:1)填充色比较差异2)单元格值比较,不包括格式信息,如字体、颜色、大小等3)字体的名称、大小、是否加粗、是否斜体、是否有下划线以及颜色是否相同fromopenpyxl.stylesimportPatternF......
  • python基础——04数据类型(元组,集合,字典)
    一、元组(tuple)1.1什么是元组元组和列表相似,但元组的元素放在()里面。t=(1,2,3,4,5)print(type(t))#<class'tuple'>t1=('hello')#<class'str'>这不是元组t2=('hello',)#<class'tuple'>print(type(t1),type(t2)......
  • YOLOv11 正式发布!你需要知道什么? 另附:YOLOv8 与YOLOv11 各模型性能比较
    YOLOv11目标检测创新改进与实战案例专栏点击查看文章目录:YOLOv11创新改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例点击查看专栏链接:YOLOv11目标检测创新改进与实战案例2024年9月30日,Ultralytics在他们的YOLOVision活动......
  • C# 都有哪些集合?
    在C#中,集合(Collection)是用来存储一组数据的对象,通常是同一类型的数据。C#提供了多种不同类型的集合,每种集合都有其独特的特点和用途。常见的集合可以分为以下几类:数组、泛型集合、非泛型集合、其他集合类型、并发集合1.数组(Array)定义:数组是C#中最基本的集合类型,用......
  • 【IPTV/IPTVnator】集合开源工具 TV 和 iptvnator 实现 IPTV 播放源的成功更新及直播
    文章目录前言一、资源说明1、iptvnator2、TV二、下载工具1、下载TV工具2、下载IPTVnator三、使用步骤1、更新iptv数据源A、默认测速方式B、使用ffmpeg作为测速工具2、使用iptvnator播放iptv数据源3、使用vlc工具播放iptv数据源四、iptvnator修改为v......
  • 链式并查集合并(裸板)
    对于操作:将一段元素合并为同类。在合并\([l,r]\)这一段数的时候,其实有很多数本来就在一个并查集里。我们只需要合并若干个还没有合并的并查集,而不需要从\(l\)到\(r\)一个一个合并。因为只要合并了这几个并查集,效果等价于把\([l,r]\)直接合并了。实现方法:每次记录一个......
  • 7.10 已知一组观测数据,如表中7.17.excel(表中第一列为x的值,第二列为y的值)。试用插值方
    importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromscipy.interpolateimportinterp1d,PchipInterpolator,CubicSplinefromscipy.optimizeimportcurve_fitfromscipy.statsimportnormfile_path='7.17.xlsx'data=pd.rea......