2016-07-12 5 views
0

Я нашел много информации о том, как сортировать список, но ни один из них не сортирует список>. В частности у меня есть карта ключевых значений, как:Как отсортировать список <Карта <String, String >>

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

У меня есть список кучи объектов, как это и нужно сортировать по «экономии». Есть идеи?

ответ

1

Вы изучили интерфейс Comparable? Вам нужно будет обернуть карту < 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 < String, String>. Вы можете отсортировать его с помощью 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>> без обертки, вы можете сделать это, но вам нужно будет реализовать своего рода алгоритму самостоятельно. Самый простой способ сделать это - использовать сортировку пузырьков.

Смежные вопросы