如何排序List <map <string,string =“”>&gt;

时间:2016-07-12 16:28:35

标签: salesforce

我发现了很多关于如何对List进行排序的信息,但没有关于如何对List&gt;进行排序的信息。具体来说,我有一个关键值的地图,如:

"Name": "John",
"Savings": 300

我有一堆像这样的对象的列表,需要排序&#34;储蓄&#34;。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您是否查看过Comparable界面?您将需要包装Map&lt; String,String&gt;在具有可比较()方法的新类中,以使其可排序。更多信息: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>>,你仍然可以这样做,但你需要自己实现排序算法。最简单的方法是使用冒泡排序。

相关问题