常规列表:当飞船操作员失败时排序如何工作?

达吉特

sortspaceship运算符 (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()工作。

根据Iterable.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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

没有操作员的“ if”如何工作?

来自分类Dev

在Ruby中覆盖太空飞船操作员时,实际发生了什么?

来自分类Dev

C# ??操作员在财产,它是如何工作的?

来自分类Dev

操作员/车轮组如何在FreeBSD上工作?

来自分类Dev

操作员在 Laravel 中的工作位置如何?

来自分类Dev

ThrottleTime 操作员的配置参数如何工作?(油门配置)

来自分类Dev

操作员突然不工作

来自分类Dev

“是”操作员未按预期工作

来自分类Dev

标量“操作员”的规范列表

来自分类Dev

R:可分配的操作员列表

来自分类Dev

芹菜:怎么“ |” 操作员在链接多个任务时工作吗?

来自分类Dev

如何成为高效的操作员+ =

来自分类Dev

如何重载虚拟操作员

来自分类Dev

如何理解新的操作员重载?

来自分类Dev

Javascript:?操作员

来自分类Dev

新线操作员

来自分类Dev

Javascript:?操作员

来自分类Dev

Java ==!= && || 操作员?

来自分类Dev

安全导航操作员(?。)无法在gradle中工作吗?

来自分类Dev

山羊胡子操作员为什么工作?

来自分类Dev

操作员过载停止在R包中工作

来自分类Dev

对操作员删除覆盖的工作方式感到困惑

来自分类Dev

养猪关系操作员可以在袋子上工作吗

来自分类Dev

涉及操作员无法正常工作的程序

来自分类Dev

角度更换管道操作员不工作

来自分类Dev

操作员之间无法正常工作 mysql

来自分类Dev

如何定义STFP操作员对气流的操作?

来自分类Dev

有操作员时,'='没有可行的重载

来自分类Dev

如何在cpp中访问父母的操作员