使用java 8功能(stream,lambda等)按降序排序int数组

时间:2015-08-03 01:01:50

标签: java java-8

令人惊讶的是,似乎java中没有简单的单行解决方案在java 8之前按降序排序int数组。例如,检查this post。现在我们已经有了java 8,是否有一种优雅,简单,单行的方式使用java 8特性,比如stream和lambda表达式,按降序对int数组进行排序?

修改
我对int[]的解决方案感兴趣,而不是Integer[]

修改
我对仅使用JAVA SE库的解决方案感兴趣。

2 个答案:

答案 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 }}