根据地图值对地图的ArrayList进行排序

时间:2015-08-14 13:52:32

标签: sorting arraylist groovy

假设我有ArrayList的{​​{1}}

Map

我想根据地图的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] 对此列表进行排序。

假设我在Groovy工作,我怎么能这样做?

3 个答案:

答案 0 :(得分:5)

您可以在Groovy中创建自己的自定义排序比较器:

generation    string     word      percentage

1             hfllr      hello     89.4%

2             hellq      hello     90.3%

3             hellp      hello     95.3%

4             hello      hello     100%

这会根据每个maps.sort { a, b -> a.key3 <=> b.key3 } 的价值对地图进行排序。

答案 1 :(得分:1)

您可以像处理任何其他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]]

此响应基于groovy 2.4.4的功能。

答案 2 :(得分:0)

我提出了一些值,以便更容易理解......

您可以创建一个比较块(非常类似于比较器)并将其传递给sort()方法

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