在对JavaDoc中findFirst说,如果流有一个邂逅的命令,那么第一个元素总是会返回,但如果流没有遭遇订单,可以返回的任何元素.
我试图演示它如何在没有遭遇顺序的流上工作,但我不能让它返回除了实际的第一个元素之外的任何东西.
我尝试将元素添加到a Set,它没有定义的遭遇顺序:
Set<String> words = new HashSet<>();
words.addAll(Arrays.asList("this", "is", "a", "stream", "of", "strings"));
Optional<String> firstString = words.stream()
.findFirst();
System.out.println(firstString);
Run Code Online (Sandbox Code Playgroud)
每次我跑,我得到a第一个字符串.然后我试图做一个Collections.shuffle关于List它添加到之前Set,但这并没有改变任何东西.
List<String> wordList = Arrays.asList("this", "is", "a", "stream", "of", "strings");
words = new HashSet<>();
words.addAll(wordList);
firstString = words.stream()
.findFirst();
System.out.println(firstString);
Run Code Online (Sandbox Code Playgroud)
我a每次都会回复这个词.
然后我尝试使用unorderedfrom方法BaseStream,声称返回没有遇到顺序的流,但没有区别:
firstString = Stream.of("this", "is", "a", "stream", "of", "strings")
.unordered()
.findFirst();
System.out.println(firstString);
Run Code Online (Sandbox Code Playgroud)
现在我this每次都得到这个词.我错过了什么吗?有没有办法证明findFirst在无序流上返回不同的值?
我已经解决了相关问题,例如如何确保 java8 流中的处理顺序?,我仍然不完全清楚输出元素的顺序。因此,请澄清我的以下疑问。
Integer[] intArray = {1, 2, 3, 4, 5, 6, 7, 8 };
List<Integer> listOfIntegers =
new ArrayList<>(Arrays.asList(intArray));
listOfIntegers
.parallelStream()
.unordered()
.forEachOrdered(e -> System.out.print(e + " "));
Run Code Online (Sandbox Code Playgroud)
我认为至少在理论上(或根据 java 规范)它可以按比 1、2、3、4、5、6、7、8 的随机顺序打印。我说得对吗?
还有一个相关的问题——相遇顺序保留的决定是在什么执行点做出的?更准确地说 - 整个流管道 ORDER 特性的评估是否在执行开始之前通过源、中间操作和终端操作的特性完成?