弗朗在他的评论中是绝对正确的。
SORTED仅针对自然秩序进行了报道,并且之前对此进行了辩论。首先,它甚至在内部被用作标记
isNaturalSort:
OfRef(AbstractPipeline<?, T, ?> upstream) { super(upstream, StreamShape.REFERENCE, StreamOpFlag.IS_ORDERED | StreamOpFlag.IS_SORTED); this.isNaturalSort = true;相同的标志
isNaturalSort被设置为
false通过使用时
sorted(CustomComparator)。
这是 一个内部 细节,看来jdk开发人员并没有发现实现此类有用的功能-可能与之无关的功能确实有用。但这可能会改变…
这里仍然至少存在一个缺陷。想象一个这样的类:
static class User implements Comparable<User> { private final int id; public User(int id) { super(); this.id = id; } public int getId() { return id; } @Override public int compareTo(User usr) { return 42; // don't do this }}和一些流操作:
Stream<User> byId = Stream.of(new User(12), new User(10)) .sorted(Comparator.comparing(User::getId));System.out.println(byId.spliterator().hasCharacteristics(Spliterator.SORTED));Stream<User> natural = Stream.of(new User(12), new User(10)) .sorted(Comparator.naturalOrder());System.out.println(natural.spliterator().hasCharacteristics(Spliterator.SORTED));Stream<User> plain = Stream.of(new User(12), new User(10)).sorted();System.out.println(plain.spliterator().hasCharacteristics(Spliterator.SORTED));
前两个报告
false,但最后一个报告
true; 这 至少 很奇怪。



