令人惊讶的是,在java中似乎没有简单的、单行的解决方案来按java 8之前的降序排序int数组。例如,检查this post。既然我们有了java 8,那么是否有一种优雅的、简单的、一行行的方法使用java 8特性(如流和lambda表达式)来按降序排序int数组?
编辑
我对int[]的解决方案感兴趣,而不是Integer[]。
编辑
我对只使用JAVA库的解决方案感兴趣。
发布于 2015-08-03 01:26:36
用番石榴,你可以简单地写
Ints.asList(a).sort(Comparator.reverseOrder());它可能不那么有效,因为它需要装箱int到Integer,但它是优雅的一行。
你也可以写一些类似的东西
int[] sorted = IntStream.of(a)
.boxed()
.sorted(Comparator.reverseOrder())
.mapToInt(i -> i)
.toArray();但是这也受到了装箱的影响,它需要创建新的数组。
无论如何,我怀疑您是否会在标准Java中找到一个很好的解决方案,不受装箱限制,因为Comparator<T>只能接受对象。目前,最好的方法是使用Arrays.sort并手动逆转它的顺序。
发布于 2015-08-03 16:53:33
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并并行化IntStream。
https://stackoverflow.com/questions/31778114
复制相似问题