首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java 8特性(流、lambda等)按降序排序int数组

使用java 8特性(流、lambda等)按降序排序int数组
EN

Stack Overflow用户
提问于 2015-08-03 01:01:49
回答 2查看 28.3K关注 0票数 7

令人惊讶的是,在java中似乎没有简单的、单行的解决方案来按java 8之前的降序排序int数组。例如,检查this post。既然我们有了java 8,那么是否有一种优雅的、简单的、一行行的方法使用java 8特性(如流和lambda表达式)来按降序排序int数组?

编辑

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

编辑

我对只使用JAVA库的解决方案感兴趣。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-03 01:26:36

用番石榴,你可以简单地写

代码语言:javascript
复制
Ints.asList(a).sort(Comparator.reverseOrder());

它可能不那么有效,因为它需要装箱int到Integer,但它是优雅的一行。

你也可以写一些类似的东西

代码语言:javascript
复制
int[] sorted = IntStream.of(a)
        .boxed()
        .sorted(Comparator.reverseOrder())
        .mapToInt(i -> i)
        .toArray();

但是这也受到了装箱的影响,它需要创建新的数组。

无论如何,我怀疑您是否会在标准Java中找到一个很好的解决方案,不受装箱限制,因为Comparator<T>只能接受对象。目前,最好的方法是使用Arrays.sort并手动逆转它的顺序。

票数 12
EN

Stack Overflow用户

发布于 2015-08-03 16:53:33

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31778114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档