我发现了很多关于如何对List进行排序的信息,但没有关于如何对List>进行排序的信息。具体来说,我有一个关键值的地图,如:
"Name": "John",
"Savings": 300
我有一堆像这样的对象的列表,需要排序"储蓄"。有什么想法吗?
答案 0 :(得分:1)
您是否查看过Comparable界面?您将需要包装Map< String,String>在具有可比较()方法的新类中,以使其可排序。更多信息:https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_comparable.htm
public class MapWrapper implements Comparable {
public Map<String,String> record;
public MapWrapper(Map<String,String> record) {
this.record = record;
}
public Integer compareTo(Object compareTo) {
MapWrapper compareToMap = (MapWrapper)compareTo;
if (record.get('Savings') == compareToMap.record.get('Savings')) return 0;
if (record.get('Savings') > compareToMap.record.get('Savings')) return 1;
return -1;
}
}
您的列表将包含MapWrapper对象而不是Map&lt; String,String&gt;。然后,您可以使用List.sort():
对其进行排序List<MapWrapper> myList = new MapWrapper[]{};
myList.add(new MapWrapper(new Map<String,String>{'Name'=>'John','Savings'=>'300'}));
myList.add(new MapWrapper(new Map<String,String>{'Name'=>'David','Savings'=>'100'}));
System.debug(myList); //Unsorted
myList.sort();
System.debug(myList); //Sorted
如果你需要在没有包装器的情况下将结构保持为List<Map<String,String>>
,你仍然可以这样做,但你需要自己实现排序算法。最简单的方法是使用冒泡排序。