这个问题基于这个问题的回答 What is the difference between Stream.of and IntStream.range?
由于
此外,分隔器将具有“已排序”特性。以下代码返回“true”:
现在,如果我在第一个代码中引入
这将产生类似于以下内容的结果:(以任意随机顺序)
因此,我认为由于使用
为什么
IntStream.range
生成的是一个已经排序好的流,下面代码的输出仅为0
:IntStream.range(0, 4)
.peek(System.out::println)
.sorted()
.findFirst();
此外,分隔器将具有“已排序”特性。以下代码返回“true”:
System.out.println(
IntStream.range(0, 4)
.spliterator()
.hasCharacteristics(Spliterator.SORTED)
);
现在,如果我在第一个代码中引入
parallel()
,那么输出将包含从0
到3
的所有4个数字,但顺序是随机的,因为由于parallel()
,流不再排序。IntStream.range(0, 4)
.parallel()
.peek(System.out::println)
.sorted()
.findFirst();
这将产生类似于以下内容的结果:(以任意随机顺序)
2
0
1
3
因此,我认为由于使用
parallel()
,SORTED
属性已被删除。但是,下面的代码也会返回true
。System.out.println(
IntStream.range(0, 4)
.parallel()
.spliterator()
.hasCharacteristics(Spliterator.SORTED)
);
为什么
parallel()
方法不会改变 SORTED
属性?并且由于所有的四个数字都被打印出来了,即使 SORTED
属性仍然存在,Java 如何意识到流不是已排序的?
spliterator.characteristics()
进行验证。但是,是的,我们仍然对主要问题感兴趣,即获得一个回答来完整解释“什么”,但是也包括“为什么”和“如何”。在我看来,现有的两个答案都不够。 - Naman