首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重.sorted(.)调用java 8流

多重.sorted(.)调用java 8流
EN

Stack Overflow用户
提问于 2018-06-14 17:10:10
回答 1查看 1.8K关注 0票数 5

我有一个对象流,我想要排序自然,但也迫使其中一个成员始终是第一。

例如:

代码语言:javascript
复制
List<String> result = Stream.of("a", "s", "d", "f")
        .sorted(Comparator.comparing((String s) -> !s.equals("d"))
                            .thenComparing(Comparator.naturalOrder()))
        .collect(toList());
System.out.println(result);

这会产生

代码语言:javascript
复制
[d, a, f, s]

也就是说,按字母顺序排列,但以"d“开头。

我注意到,我也可以使用多个.sorted(...)调用来编写这个文件:

代码语言:javascript
复制
List<String> result = Stream.of("a", "s", "d", "f")
        .sorted()
        .sorted(Comparator.comparing(s -> !s.equals("d")))
        .collect(toList());
System.out.println(result);

这也产生了同样的结果,而且海事组织的可读性更强。

然而,我没有看到其他人这样做的例子。

此外,IntelliJ IDEA将第一个.sorted()调用标记为冗余。它说“后续的‘排序’调用使排序无用”。

这显然是不正确的,因为删除调用会将输出更改为

代码语言:javascript
复制
[d, a, s, f]

所以我的问题是:是流定义的行为上有多个.sorted(...)调用,还是我只是运气好呢?

换句话说,这是我可以依赖的对.sorted()的支持使用,还是只发生在现在,并且可能在将来的某个版本中停止工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-14 17:23:23

当你说“定义”时,我假设你是在问“那种稳定吗”?如果是的话,是的。

第二个示例片段的第一个sorted()调用将根据自然顺序对元素进行排序,然后根据提供的比较器再次排序。

第二种方法的问题是它效率低下,因为它需要两种排序操作,因此可以决定使用第一种方法。

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

https://stackoverflow.com/questions/50862691

复制
相关文章

相似问题

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