我有一个我想要自然排序的对象流,但也强制其中一个成员总是第一个。
例如:
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]
所以我的问题是:是多重的吗?
.排序(…)
调用流定义的行为,还是我只是运气好?
换句话说,这是支持使用
。已排序()
我可以依赖它,或者它只是在现在工作,并且可能在将来的Java版本中停止工作?