sort
当spaceship
运算符 (compareTo) 列表失败时,列表列表如何工作?
请注意,它不仅是equals
,而且compareTo
(更大、更低或相等)
def v1=[1, 2, 0]
def v2=[1, 3, 0]
def v=[v2,v1]
println v
//prints> [[1, 3, 0], [1, 2, 0]]
v=v.sort()
assert v[0]==v1
println v
//prints> [[1, 2, 0], [1, 3, 0]]
c=c.sort{x,y-> y<=>x}
//throws Cannot compare java.util.ArrayList with value '[1, 3]' and java.util.ArrayList with value '[1, 2, 3]'
根据上面的代码List<List>.sort()
工作。
对集合进行排序。假设集合项具有可比性,并使用它们的自然顺序来确定结果顺序。
问题为什么以及如何List<List>.sort()
在 groovy 中工作?
有人可以指出我如何在 groovy 中实现数组的比较以进行sort()
操作吗?
不同行为的原因是因为涉及不同的方法。当您调用时c.sort{x,y-> y<=>x}
, this 会调用Iterable.sort
,这会引发异常,因为列表的元素不是Comparable
。
但是,当您调用 时v.sort()
,您正在调用中定义的此方法DefaultGroovyMethods.java
public static <T> List<T> sort(Iterable<T> self) {
return sort(self, true);
}
调用这个:
public static <T> List<T> sort(Iterable<T> self, boolean mutate) {
List<T> answer = mutate ? asList(self) : toList(self);
Collections.sort(answer, new NumberAwareComparator<T>());
return answer;
}
正如您所看到的,这提供了一个Comparator
来确定列表元素的顺序,因此它们不需要是Comparable
它们自己。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句