如何检查Java流是否已排序?
是否可以检查Java如何检查Java流是否已排序?,java,java-stream,Java,Java Stream,是否可以检查Java流是否已订购 通过无序流我的意思是,例如,调用了unordered()的流。为了检查流是否无序,您需要获取流的拆分器的特征,并且test is 3th bit设置为1 您可以使用此代码段作为示例: Stream<Integer> sorted = Stream.of(1, 2, 3).sorted(); System.out.println((sorted.spliterator().hasCharacteristics(Spliterator.S
流是否已订购
通过无序流
我的意思是,例如,调用了unordered()
的流。为了检查流是否无序,您需要获取流的拆分器的特征,并且test is 3th bit设置为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));
感谢@Holger指出最后一刻。任何此类检查都将消耗流。可以接受吗?您只需在拆分器上调用.hasCharacteristics(Spliterator.ORDERED)
。但是请记住,在流上调用spliterator()
会消耗流。@Holger,谢谢,我错过了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