令人惊讶的是,似乎在java中没有简单的单行解决方案在java 8之前按降序排序int数组.例如,检查这篇文章.现在我们有了java 8,是否有一种优雅,简单,单行的方式使用java 8特性,比如stream和lambda表达式,按降序排序int数组?
编辑
我对解决方案感兴趣int[]
,而不是Integer[]
.
编辑
我对仅使用JAVA SE库的解决方案感兴趣.
用番石榴你可以简单地写
Ints.asList(a).sort(Comparator.reverseOrder());
Run Code Online (Sandbox Code Playgroud)
它可能不是那么有效,因为它需要拳击int到整数,但它是优雅的单行.
你也可以写点东西
int[] sorted = IntStream.of(a)
.boxed()
.sorted(Comparator.reverseOrder())
.mapToInt(i -> i)
.toArray();
Run Code Online (Sandbox Code Playgroud)
但这也遭受拳击,它需要创建新的阵列.
无论如何,我怀疑你会发现标准Java免费拳击的好解决方案,因为Comparator<T>
只能接受对象.现在最好的方法是Arrays.sort
手动使用和反转其订单.
int[] arr = ...;
Arrays.sort(arr);
int[] reversed = IntStream.range(0, arr.length)
.map(i -> arr[arr.length-i-1])
.toArray();
Run Code Online (Sandbox Code Playgroud)
如果您不想将int
数组中的每个值装入其各自的包装类中,则可能是最接近的方法。
O(nlogn)
如果您因执行一次排序 ( ) 和 () 之后执行反向操作而受到性能影响O(n)
,您可能需要研究Arrays.parallelSort
并并行化IntStream
.