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
в неупорядоченном потоке возвращает разные значения?