2015-08-14 3 views
1

Скажем, у меня есть этот ArrayList из Map sСортировка ArrayList Карты на основе стоимости карты

def map1 = [key1:value1, key2:value2, key3:value3] 
def map2 = [key1:value1, key2:value2, key3:value3] 
def map3 = [key1:value1, key2:value2, key3:value3] 
def maps = [map1, map2, map3] 

Я хочу, чтобы отсортировать этот список, основанный на value3 карт.

Как я могу это сделать, полагая, что я работаю в Groovy?

+0

Почему бы вам не использовать простые http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List,%20java .util.Comparator)? – Vartlok

+0

Можете ли вы помочь мне, как «компаратор» будет в моем случае? – Mich

+0

Вы должны поместить список 'maps' после определения содержащихся в нем карт. Пример не будет компилироваться как есть. –

ответ

3

Вы можете создать свой собственный пользовательский сортировки компаратор, как это в Groovy:

maps.sort { a, b -> a.key3 <=> b.key3 } 

Это сортирует карты, основанные на значении каждого из них key3.

0

Вы можете иметь дело с ArrayList карт, как с любым другим ArrayList. Следовательно, вызов Collections.sort(List) позаботится о вашей проблеме, сортируя ее, используя естественный порядок hashMaps - вероятно, это будет использовать идентификатор. Если вы хотите предоставить Компаратор, чтобы предоставить более подходящую логику тому, что вы имеете в виду, вы можете использовать Collections.sort(List, Comparator).

В groovy вы можете напрямую позвонить .sort() по заданному массиву, это возможно, так как DefaultGroovyMethods содержит несколько вспомогательных методов, среди которых несколько методов сортировки.

На ваш код:

def map1 = [key1:"1",key2:"2",key3:"3"] 
def map2 = [key1:"2",key2:"3",key3:"1"] 
def map3 = [key1:"3",key2:"1",key3:"2"] 
def maps = [map1,map2,map3 ] 


maps.sort(); 
maps.sort({m1, m2 -> m1.key3 <=> m2.key3}) 

println maps 

Выход:

[[key1:2, key2:3, key3:1], [key1:3, key2:1, key3:2], [key1:1, key2:2, key3:3]] 

Этот ответ основаны на возможностях заводной 2.4.4.

0

Я положил некоторые ценности, чтобы легче понять ...

Вы можете создать блок сравнения (очень аналогичный компаратора) и передать его в метод сортировки()

def map1 = [key1:11,key2:12,key3:13] 
def map2 = [key1:21,key2:22,key3:23] 
def map3 = [key1:31,key2:32,key3:33] 
def maps = [map2,map1,map3] //map1 in second position 

maps.sort({mapa, mapb -> mapa.key3.compareTo(mapb.key3)})​ 

выход бы

[[key1:11, key2:12, key3:13], [key1:21, key2:22, key3:23], [key1:31, key2:32, key3:33]] //now they are sorted 
Смежные вопросы