Sorting 基于贴图值对贴图的ArrayList进行排序
假设我有Sorting 基于贴图值对贴图的ArrayList进行排序,sorting,arraylist,groovy,Sorting,Arraylist,Groovy,假设我有Maps的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中工作,我该怎么做呢?您可以像
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中工作,我该怎么做呢?您可以像处理任何其他ArrayList一样处理地图的ArrayList。因此,调用将处理您的问题,使用hashMaps的自然顺序对其进行排序-可能这将使用identity。如果您想提供一个比较器,以便根据您的想法提供更合适的逻辑,您可以使用它 在groovy中,可以在给定数组上直接调用
.sort()
,这是可能的,因为包含多个helper方法,其中包括多个与排序相关的方法
在您的代码上:
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
此响应基于groovy 2.4.4的功能。您可以在groovy中创建自己的自定义排序比较器,如下所示:
maps.sort { a, b -> a.key3 <=> b.key3 }
maps.sort{a,b->a.key3 b.key3}
这将根据每个人的
key3
的值对地图进行排序,我输入了一些值,以便于理解
您可以创建一个比较块(非常类似于比较器)并将其传递给sort()方法
会让步
[[key1:11, key2:12, key3:13], [key1:21, key2:22, key3:23], [key1:31, key2:32, key3:33]] //now they are sorted
为什么不使用simple?你能告诉我“comparator”在我的情况下是什么吗?你应该把
映射列表放在它包含的映射定义之后。示例不会按原样编译。a
和b
代表什么?这里的闭包就像一个比较器,a
和b
是排序操作要比较的两个列表元素。由于maps
是地图对象的列表,a
和b
在这种情况下都是地图。请参见此处的文档:
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