根据 的文档Spliterator#getComparator
,它指出
如果此 Spliterator 的来源是
SORTED
aComparator
,则返回 thatComparator
。如果源是SORTED
自然顺序,则返回 null。否则,如果源不是SORTED
,则抛出IllegalStateException
。实施要求:
默认实现总是抛出
IllegalStateException
.返回: a
Comparator
,或者null
元素是否按自然顺序排序。抛出:
IllegalStateException
- 如果分离器没有报告SORTED
.
所以在运行这段代码的时候
Spliterator<Integer> spliterator = Stream.of(1, 2, 3).sorted().spliterator();
System.out.println((spliterator.characteristics() & Spliterator.SORTED) == Spliterator.SORTED);
System.out.println(spliterator.getComparator());
我得到:
true
null
到目前为止,一切都很好。现在这样做时:
Spliterator<Integer> spliterator = Stream.of(1, 2, 3).sorted(Comparator.naturalOrder()).spliterator();
System.out.println((spliterator.characteristics() & Spliterator.SORTED) == Spliterator.SORTED);
System.out.println(spliterator.getComparator());
它输出false
并抛出异常:
Exception in thread "main" java.lang.IllegalStateException
at java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.getComparator(StreamSpliterators.java:259)
at SpliteratorTest.main(SpliteratorTest.java:10)
为什么它输出false并抛出异常?
根据文档,它不应该给我Comparator
我提供给的东西吗?sorted()
(这也发生在reverseOrder()
, 或comparing(identity())
等处)。