JavaDocs для findFirst говорят, что если поток имеет порядок встреч, тогда первый элемент всегда будет возвращен, но если поток не имеет встречный порядок, любой элемент может быть возвращен.
Я пытаюсь продемонстрировать, как это работает в потоке без порядка встреч, но я не могу заставить его возвращать ничего, кроме первого первого элемента.
Я попытался добавить элементы в 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);
Каждый раз, когда я запускаю, я получаю 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);
Я все равно возвращаю слово a каждый раз.
Затем я попытался использовать метод unordered из BaseStream, который утверждает, что возвращает поток без указания последовательности, но не имеет разницы:
firstString = Stream.of("this", "is", "a", "stream", "of", "strings")
.unordered()
.findFirst();
System.out.println(firstString);
Теперь я получаю слово this каждый раз. Я что-то упускаю? Есть ли способ продемонстрировать, что findFirst в неупорядоченном потоке возвращает разные значения?