You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除sObject列表中含重复记录名称的原元素与重复元素?

解决sObject列表中移除所有重复名称元素的问题

我来帮你搞定这个需求!你要的是彻底移除所有存在重复名称的记录(包括最初的那条和重复出现的),只保留那些名称唯一的条目,对吧?咱们一步步来实现这个逻辑:

核心思路

要实现这个效果,关键是先统计每个名称在列表里出现的次数,然后只保留那些出现次数恰好为1的记录。具体分两步:

  1. 遍历原列表,用Map统计每个名称的出现频次
  2. 再次遍历原列表,筛选出频次为1的记录,组成新列表

示例Apex代码实现

假设你的sObject是自定义对象或者标准对象,名称字段为Name,代码如下:

// 假设这是你的原始sObject列表
List<sObject> originalList = new List<sObject>{
    new Account(Name='Chair1'),
    new Account(Name='Chair2'),
    new Account(Name='Chair3'),
    new Account(Name='Chair4'),
    new Account(Name='Chair5'),
    new Account(Name='Chair6'),
    new Account(Name='Chair7'),
    new Account(Name='Chair1'),
    new Account(Name='Chair2')
};

// 第一步:统计每个名称的出现次数
Map<String, Integer> nameCountMap = new Map<String, Integer>();
for(sObject obj : originalList) {
    String recordName = (String)obj.get('Name');
    if(nameCountMap.containsKey(recordName)) {
        nameCountMap.put(recordName, nameCountMap.get(recordName) + 1);
    } else {
        nameCountMap.put(recordName, 1);
    }
}

// 第二步:筛选出仅出现一次的记录
List<sObject> uniqueOnlyList = new List<sObject>();
for(sObject obj : originalList) {
    String recordName = (String)obj.get('Name');
    if(nameCountMap.get(recordName) == 1) {
        uniqueOnlyList.add(obj);
    }
}

// 验证结果
for(sObject obj : uniqueOnlyList) {
    System.debug('保留的记录名称:' + obj.get('Name'));
}

关于你提到的“Chai...”显示问题

你说结果显示为“Chai...”,大概率是调试日志里的字符串截断问题——Salesforce的调试日志会对过长的字符串进行截断显示,但实际数据是完整的。如果是逻辑错误导致结果不对,那就要检查你之前的代码是不是只做了普通去重(保留第一个重复项),而没有把所有重复的条目都移除。上面的代码可以确保所有出现多次的名称对应的记录都被排除,只留唯一的。

内容的提问来源于stack exchange,提问作者Saswata Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:32:09