Arrays.sort()
不起作用。为什么?
groovy程序:
foo = [3,2,1,9]
Arrays.sort(foo)
println foo.getClass()
println foo
结果:
class java.util.ArrayList
[3, 2, 1, 9]
版本:
$ groovy --version
Groovy Version: 2.4.4 JVM: 1.7.0_80 Vendor: Oracle Corporation OS: Mac OS X
我认为这是由java.util.ArrayList
引起的。所以我试着添加“type”(见下文),没关系(我可以得到排序结果)。但我无法理解这些时髦的行为......
groovy(这将被排序):
int[] foo2 = [3,2,1,9]
Arrays.sort(foo2)
println foo2.getClass()
println foo2
答案 0 :(得分:2)
Arrays.sort()需要数组。 Groovy解释在varargs样式的参数列表中将对象作为一个参数传递。你可以在这里看到:
def test(Object[] a) {
println a[0]
}
test(foo)
输出
[3, 2, 1, 9]
答案 1 :(得分:2)
正如其他答案所指出,Arrays
适用于Arrays
。 Array
和ArrayList
是非常不同的数据结构,主要区别在于前者是固定长度结构,后者是可变长度数据。
您在代码中寻找的是将Arrays.sort(foo)
替换为Collections.sort(foo)
。
但是,使用Groovy,您只需在sort()
对象上调用ArrayList
方法即可。请注意,sort也是一个闭包,因此您可以直接在对象上实现自定义排序算法:
foo = [3,2,1,9]
println foo.getClass()
println foo //[3,2,1,9]
Collections.sort(foo)
println foo //[1,2,3,9]
println foo.sort() //[1, 2, 3, 9]
println foo.sort{a,b-> a-b } //[1, 2, 3, 9]
println foo.sort{a,b-> b-a } //[9, 3, 2, 1]
答案 2 :(得分:1)
直接排序。只需做一个[3, 2, 1, 9].sort()
。