假设我有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工作,我怎么能这样做?
答案 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