【问题标题】:Remove all duplicate and the original elements from a list从列表中删除所有重复元素和原始元素
【发布时间】:2018-02-04 16:19:37
【问题描述】:

我有一个 sObject 元素列表。我想删除与原始记录具有相同记录名称的重复元素。

假设如果我有一个记录名称为的元素列表 椅子1,椅子2,椅子3,椅子4,椅子5,椅子6,椅子7,椅子1,椅子2

我想打印一个列表,其中只有没有重复的元素。对于这种情况,我应该得到列表 Chair3,Chair4,Chair5,Chair6,Chair7。

我正在使用以下代码来实现此功能。但我得到的记录为:Chair1,Chair2,Chair3,Chair4,Chair5,Chair6,Chair7。

在理想情况下,我们不应该得到 Chair1,Chair2 的记录,因为它们已经有重复的记录。

List <Chair__c> chairList = [SELECT
                             ID,
                             Name
                             FROM Chair__c
                             ORDER BY Name ASC];
System.debug('chairListOrderbyName::'+chairList);

List <String> chairNameList = new List <String>();

for(Integer i = 0; i < chairList.size();i++) {

    for(Integer j = 0;j < chairList.size();j++) {

    if(chairList[i].Name.equalsIgnoreCase(chairList[j].Name) && i != j) {

        chairList.remove(i);
        chairList.remove(j);
    }
}
}
System.debug('chairList::'+chairList);

【问题讨论】:

    标签: list collections salesforce apex


    【解决方案1】:

    如果您真的只需要名称,您可以使用纯 SOQL 使用 GROUP BYHAVING 来完成。类似的东西

    SELECT Name
    FROM Chair__c
    GROUP BY Name
    HAVING COUNT(Id) = 1 // only unique entries
    

    如果您需要完整的 sObjects,那么我会创建一个助手 Set&lt;String&gt; 并遍历结果。如果名称不在集合中 - 添加它。但如果它已经存在 -> 删除它!

    其实我们来做个Map吧,类似的想法……

    Map<Set, Chair__c> chairs = new Map<Set, Chair__c>();
    for(Chair__c c : [SELECT ...]){
        if(chairs.containsKey(c.Name)){
            chairs.remove(c.Name);
        } else {
            chairs.put(c.Name, c);
        }
    }
    System.debug(JSON.serializePretty(chairs));
    System.debug(chairs.values());
    

    【讨论】:

      【解决方案2】:

      尝试使用Set&lt;String&gt; 而不是List&lt;String&gt;。参考下面的解决方案

      List <Chair__c> chairList = [SELECT
                                   ID,
                                   Name
                                   FROM Chair__c
                                   ORDER BY Name ASC];
      
      Set<String> chairNameSet = new Set<String>();
      for(String item: chairList ) {
          chairNameSet.add(item);
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 2015-01-05
        相关资源
        最近更新 更多