我有一个由API值填充的SelectOption[],我需要按值排序,而不是按键。顺序必须是[0-9-A-Z]。此外,我需要在第一个位置固定一个值,即"选择描述"值。我尝试了一些方法,但没有用。有人能帮帮我吗?这个问题我都快疯了。
这里的问题是,可以用于任何其他实现自定义排序的自定义类的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_listrongorting_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;
}
详情请参阅以下连结
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_listrongorting_sobject.htm
我希望上面的解决方案对你有帮助。如果是,请将其标记为最佳答案,以帮助其他人。谢谢苏拉吉特里帕西