是否可以检查Java Stream
是否已订购?
我所说的Stream
是无序的,例如,在其上调用了unordered()
的流。
答案 0 :(得分:4)
要检查流是否无序,您需要获取流的分离器的特性,并将test的第3位设置为1。
您可以使用以下代码段作为示例:
Stream<Integer> sorted = Stream.of(1, 2, 3).sorted();
System.out.println((sorted.spliterator().hasCharacteristics(Spliterator.SORTED));
sorted = Stream.of(1, 2, 3).sorted().unordered();
System.out.println((sorted.spliterator().hasCharacteristics(Spliterator.SORTED));
Stream<Integer> unordered = Stream.of(1, 2, 3).unordered();
System.out.println((unordered.spliterator().hasCharacteristics(Spliterator.SORTED));
unordered = Stream.of(1, 2, 3);
System.out.println((unordered.spliterator().hasCharacteristics(Spliterator.SORTED));
有关更多详细信息,请检查Spliterator documentation。
更新:
但是spliterator()
的调用是流上的终端操作,这意味着无法对其执行更多操作。尽管这些元素也不会被消耗,但仍可以通过以下方式创建具有相同特征的新流:
Spliterator<Integer> spliterator = unordered.spliterator();
System.out.println(spliterator.hasCharacteristics(Spliterator.SORTED));
Stream<Integer> newStream = StreamSupport.stream(spliterator, unordered.isParallel())
.onClose(unordered::close); // in case if you have some close handlers on initial stream
感谢@Holger指出了最后一刻。