首页 > 其他分享 >通过多个字段作为唯一标识对List对象去重

通过多个字段作为唯一标识对List对象去重

时间:2024-02-26 15:56:13浏览次数:33  
标签:MATNR 多个 PC ATNAM AEDTM List 标识 80

1、背景

List对象定义形式和现有的值如下所示。

List<Test> testList = new ArrayList<>();
[{
    "ISDEL": "",
    "ATNAM": "Z008_80_PC_4270Y153",
    "AEDTM": "20230808",
    "MATNR": "80.PC-4270"
}, {
    "ISDEL": "",
    "ATNAM": "Z008_80_PC_4270Y153",
    "AEDTM": "20230808",
    "MATNR": "80.PC-4270"
}, {
    "ISDEL": "",
    "ATNAM": "Z008_80_PC_4270Y153",
    "AEDTM": "20230808",
    "MATNR": "81.PC-4271"
}, {
    "ISDEL": "",
    "ATNAM": "Z007_80_PC_4270Y154",
    "AEDTM": "20230808",
    "MATNR": "80.PC-4270"
}]

2、目的

如果ATNAM和MATNR都一样,就认为list中的这两条记录是一样的。

3、去重

//通过MATNR+ATNAM作为唯一标识去重

List<Test> testListOnly = removeDuplicates(testList);
private List<Test> removeDuplicates(List<Test> testList) {
    Set<String> uniqueIdentifiers = new HashSet<>();
    List<Test> result = new ArrayList<>();
    for (Test test : testList) {
        String identifier = test.getMatnr() + test .getAtnam();
        if (!uniqueIdentifiers.contains(identifier)) {
            uniqueIdentifiers.add(identifier);
            result.add(test);
        }
    }
    return result;
}

4、结果

[{
    "ISDEL": "",
    "ATNAM": "Z008_80_PC_4270Y153",
    "AEDTM": "20230808",
    "MATNR": "80.PC-4270"
}, {
    "ISDEL": "",
    "ATNAM": "Z008_80_PC_4270Y153",
    "AEDTM": "20230808",
    "MATNR": "81.PC-4271"
}, {
    "ISDEL": "",
    "ATNAM": "Z007_80_PC_4270Y154",
    "AEDTM": "20230808",
    "MATNR": "80.PC-4270"
}]

 

标签:MATNR,多个,PC,ATNAM,AEDTM,List,标识,80
From: https://www.cnblogs.com/doubleflower/p/18034501

相关文章

  • redis自学(5)QuickList
    问题1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办?为了缓解这个问题,我们必须限制ZipList的长度和entry大小。问题2:但是我们要存储大量数据,超出了ZipList最佳的上限怎么办?我们可以创建多个ZipList来分片存储数据。问题3:数据拆分后比......
  • Npoi 中一个sheet多个 head row 情况下设置自动合适的宽度
    publicvoidTEst(){vardics=newList<Dictionary<string,int>>();dics.Add(newDictionary<string,int>{{"key0",12},{"key1",4},{"key2",5},{"key3",8}});......
  • redis-深入分析redis之listpack,取代ziplist?
    ziplist的不足主要在于当ziplist中元素个数过多,它的查找效率就会降低。而且如果在ziplist里新增或修改数据,ziplist占用的内存空间还需要重新分配;更糟糕的是,ziplist新增某个元素或修改某个元素时,可能会导致后续元素的prevlen占用空间都发生变化,从而引起连锁更新问题,导致......
  • Windows 10中还有其他类似的标识符和概念
    Windows10中还有其他类似的标识符和概念。以下是一些常见的:用户名(Username):每个用户在系统中都有一个唯一的用户名,用于登录和识别用户身份。用户ID(UserID):每个用户在系统中都有一个唯一的用户ID,用于在系统级别上标识用户。组(Group):组是一种将多个用户集合在一起的机制。每......
  • UE5源码版本在多个工程来回切换时重复编译引擎问题
    细看UBT日志,已经给出了提示11>ParsingheadersforActionRPG11>RunningInternalUnrealHeaderToolD:\UEProject\ActionRPG\ActionRPG.uprojectD:\UEProject\ActionRPG\Intermediate\Build\Win64\ActionRPG\Development\ActionRPG.uhtmanifest-WarningsAsError......
  • python list 动态数组
    list 对象是一种 容量自适应 的 线性容器 ,底层由 动态数组 实现。动态数组结构决定了 list 对象具有优秀的尾部操作性能,但头部操作性能却很差劲。容量调整当我们调用 append 、pop 、insert 等方法时,列表长度随之发生变化。当列表长度超过底层数组容量时,便需要......
  • 软件版本号解读(语义化SemVer、日历化CalVer及标识符)
    软件版本号解读(语义化SemVer、日历化CalVer及标识符)1.版本控制规范1.1.语义化版本(SemVer)版本格式:主版本号.次版本号.修订号,版本号递增规则:主版本号(MAJORversion):添加了不兼容的API修改,次版本号(MINORversion):添加了向下兼容的功能性新增,修订号(PATCHversion):添加向......
  • 在K8S中,如何实现创建多个名为"Linux"的Pod?
    在Kubernetes(K8S)中,创建多个名为"Linux"的Pod并不是通过直接指定相同的Pod名称来实现的,因为每个Pod必须具有唯一的名称。然而,您可以创建多个使用相同模板或配置文件的Pod,这些Pod可以共享类似的标签(label),从而可以通过标签来逻辑上归类为“Linux”类型。例如,如果您想要创建10个运行L......
  • CMakeLists的编写注意
    `add_executable(${CMAKE_PROJECT_NAME})`的位置对于`link_directories`命令的影响可能与项目的目录结构和依赖项的设置有关。一般来说,`link_directories`命令应该在`add_executable`命令之前调用,以确保在链接时能够正确找到所需的库文件。如果在`add_executable`之后调用`link_d......
  • redis自学(4)ZipList
    ZipList是一种特殊的“双端链表”,由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为O(1)。    ZipListEntryZipList中的Entry并不像普通链表那样记录前后节点的指针,因为记录两个指针要占用16个字节,浪费内存。而是采用了下......