如何移除sObject列表中含重复记录名称的原元素与重复元素?
解决sObject列表中移除所有重复名称元素的问题
我来帮你搞定这个需求!你要的是彻底移除所有存在重复名称的记录(包括最初的那条和重复出现的),只保留那些名称唯一的条目,对吧?咱们一步步来实现这个逻辑:
核心思路
要实现这个效果,关键是先统计每个名称在列表里出现的次数,然后只保留那些出现次数恰好为1的记录。具体分两步:
- 遍历原列表,用Map统计每个名称的出现频次
- 再次遍历原列表,筛选出频次为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
相关产品推荐
相关产品推荐

