我有一个对象流,我想要排序自然,但也迫使其中一个成员始终是第一。
例如:
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);这会产生
[d, a, f, s]也就是说,按字母顺序排列,但以"d“开头。
我注意到,我也可以使用多个.sorted(...)调用来编写这个文件:
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()调用标记为冗余。它说“后续的‘排序’调用使排序无用”。
这显然是不正确的,因为删除调用会将输出更改为
[d, a, s, f]所以我的问题是:是流定义的行为上有多个.sorted(...)调用,还是我只是运气好呢?
换句话说,这是我可以依赖的对.sorted()的支持使用,还是只发生在现在,并且可能在将来的某个版本中停止工作?
发布于 2018-06-14 17:23:23
当你说“定义”时,我假设你是在问“那种稳定吗”?如果是的话,是的。
第二个示例片段的第一个sorted()调用将根据自然顺序对元素进行排序,然后根据提供的比较器再次排序。
第二种方法的问题是它效率低下,因为它需要两种排序操作,因此可以决定使用第一种方法。
https://stackoverflow.com/questions/50862691
复制相似问题