【发布时间】:2021-10-11 15:16:22
【问题描述】:
我有一个由 API 值填充的 SelectOption[],我需要按值排序,而不是键。顺序必须是 [0-9-A-Z]。另外,我需要在第一个位置修复一个值,即“选择描述”值。我尝试了一些东西但没有工作。有人能帮助我吗?我对这个问题失去了理智。
【问题讨论】:
标签: java salesforce apex
我有一个由 API 值填充的 SelectOption[],我需要按值排序,而不是键。顺序必须是 [0-9-A-Z]。另外,我需要在第一个位置修复一个值,即“选择描述”值。我尝试了一些东西但没有工作。有人能帮助我吗?我对这个问题失去了理智。
【问题讨论】:
标签: java salesforce apex
这里的问题是在这种情况下不能修改可用于任何其他自定义类以实现自定义排序的 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 列表。
【讨论】:
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;
}
更多详情请参考以下链接。
希望上述解决方案对您有所帮助。如果是,请将其标记为最佳答案以帮助他人。
感谢和问候, 苏拉吉特里帕蒂
【讨论】: