令人惊讶的是,似乎java中没有简单的单行解决方案在java 8之前按降序排序int数组。例如,检查this post。现在我们已经有了java 8,是否有一种优雅,简单,单行的方式使用java 8特性,比如stream和lambda表达式,按降序对int数组进行排序?
修改
我对int[]
的解决方案感兴趣,而不是Integer[]
。
修改
我对仅使用JAVA SE库的解决方案感兴趣。
答案 0 :(得分:8)
使用番石榴,你可以简单地写
Ints.asList(a).sort(Comparator.reverseOrder());
它可能效率不高,因为它需要将int装入int,但它是优雅的单行。
您还可以编写类似
的内容int[] sorted = IntStream.of(a)
.boxed()
.sorted(Comparator.reverseOrder())
.mapToInt(i -> i)
.toArray();
但这也会受到拳击的影响,需要创建新阵列。
无论如何,我怀疑你会在标准的Java免费拳击中找到很好的解决方案,因为Comparator<T>
只能接受对象。现在最好的方法是使用Arrays.sort
并手动反转其订单。
答案 1 :(得分:4)
int[] arr = ...;
Arrays.sort(arr);
int[] reversed = IntStream.range(0, arr.length)
.map(i -> arr[arr.length-i-1])
.toArray();
如果你不想将int
打包到数组中每个值的相应包装类中,可能是你能做的最接近的。
如果您通过排序一次(O(nlogn)
)和(O(n)
之后的反向操作)遭受表演,您可能希望查看Arrays.parallelSort
并并行化{{1 }}