Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 基于贴图值对贴图的ArrayList进行排序_Sorting_Arraylist_Groovy - Fatal编程技术网

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