2013-05-23 2 views
2

У меня есть этот список LinkedHashMap, как можно заказать его значение?Список заказа LinkedHashMap

List<LinkedHashMap<String, Object>> list = more "key:value"...... 

Например в моем списке у меня есть:

[{"field1": "z", "field2":"a"}, 
    {"field1" : "b", "field2":"x"}] 

и я хочу порядок, основанный на значениях ключей «Field1», например:

[{"field1": "b", "field2":"x"}, 
    {"field1" : "z", "field2":"a"}] 

я есть сделать это класс:

public class OrderComparator implements Comparator { 
    String field; 

    public OrderComparator (String field){ 
     this.field = field; 
    } 

    @Override 
    public int compare(Object obj1, Object obj2) { 
      LinkedHashMap<String, Object> a = (LinkedHashMap<String, Object>) obj1; 
      LinkedHashMap<String, Object> b = (LinkedHashMap<String, Object>) obj2; 

      return a.get(this.field).toString().compareTo(b.get(this.field).toString()); 
    } 
} 

и:

Collections.sort(list, new OrderComparator(sortColumn)); 

Верно? Спасибо всем!!!

+0

Прости меня за то, педантичный, но ради нашей профессии и хорошего стиля и документации, вы должны переименовать файл 'OrderComparable' класс в 'OrderComparator', так как класс не реализует« сравнимый »объект, а компаратор. – amn

+0

ты прав, это мое отвлечение сначала было Сопоставимым, но это не сработало, и я сделал этот компаратор, спасибо. – Doom

ответ

3

Использование пользовательских Comparator

Collections.sort(list, new Comperator<Map<String, Object>>() { 
    public int compare(Map<String, Object> a, Map<String, Object> b) { 
     return a.get("field1").compareTo(b.get("field1")); 
    } 
}); 
Смежные вопросы