【问题标题】:Order Select Option by value alphabetically按字母顺序按值排序选择选项
【发布时间】:2021-10-11 15:16:22
【问题描述】:

我有一个由 API 值填充的 SelectOption[],我需要按值排序,而不是键。顺序必须是 [0-9-A-Z]。另外,我需要在第一个位置修复一个值,即“选择描述”值。我尝试了一些东西但没有工作。有人能帮助我吗?我对这个问题失去了理智。

【问题讨论】:

    标签: java salesforce apex


    【解决方案1】:

    这里的问题是在这种情况下不能修改可用于任何其他自定义类以实现自定义排序的 SelectOption compareTo() 方法。

    我建议您使用此处建议的解决方法:https://developer.salesforce.com/forums/?id=906F00000008zlJIAQ

    这个想法基本上是首先为 SelectOption 创建一个值,该值首先使用标签与值的连接,以便将 sort() 方法与标签一起使用。使用 sort() 方法对列表进行排序后,您可以恢复串联,但现在您将得到一个排序列表。

    另一种方法是定义您自己的 CustomSelectOption 类并使用标签而不是值 (https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_list_sorting_sobject.htm) 实现 compareTo() 方法。然后,您可以轻松地将 CustomSelectOption 的排序列表转换为 SelectOption 列表。

    【讨论】:

      【解决方案2】:
      public static List<SelectOption> sortSelectOptionList(List<SelectOption> source)
      {
          List<string> sortable = new  LIst<string>();
          for(SelectOption so: source)
          {
              // replace blank with '_!' so we know the final split will have two components
              sortable.Add((string.isblank(so.getLabel())?'_!':so.getLabel()) + '@!@' + (string.isblank(so.getValue())?'_!':so.getValue()));
          }
          // sort the list
          sortable.sort();
          List<SelectOption> targetList = new  List<SelectOption>();
          // split the value/name components and re create the list
          for(string s: sortable)
          {
                  targetList.Add(new  SelectOption(s.split('@!@')[1].replace('_!',''), s.split('@!@')[0].replace('_!','')));
           
          }
          return targetList;
      }
      

      更多详情请参考以下链接。

      https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_list_sorting_sobject.htm

      希望上述解决方案对您有所帮助。如果是,请将其标记为最佳答案以帮助他人。

      感谢和问候, 苏拉吉特里帕蒂

      【讨论】:

      • 谢谢!我尝试像这样实现,调用我为此方法创建的类:SelectOptionSorter.sortSelectOptionList(sList);但不工作:((((
      猜你喜欢
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多