, например:

овленныйэтот вопросЯ начал играть с упорядоченными и неупорядоченными потоками, параллельными и последовательными потоками и терминальными операциями, которые относятся к порядку встреч с терминальными операциями, которые его не уважают.

В одном ответе на связанный вопрос показан код, подобный этому:

List<Integer> ordered = Arrays.asList(
    1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4);
List<Integer> result = new CopyOnWriteArrayList<>();

ordered.parallelStream().forEach(result::add);

System.out.println(ordered);
System.out.println(result);

И списки действительно разные.unordered&nbsp;список даже изменяется от одного прогона к другому, показывая, что результат фактически недетерминирован.

Итак, я создал этот другой пример:

CopyOnWriteArrayList<Integer> result2 = ordered.parallelStream()
        .unordered()
        .collect(Collectors.toCollection(CopyOnWriteArrayList::new));

System.out.println(ordered);
System.out.println(result2);

И я ожидал увидеть аналогичные результаты, так как поток является параллельным и неупорядоченным (возможно,unordered()&nbsp;избыточно, так как это уже параллельно). Однако результирующий список упорядочен, то есть он равен исходному списку.

Итак, мой вопрос, почему собранный список упорядочен? Есть лиcollect&nbsp;всегда соблюдать порядок встречи, даже для параллельных неупорядоченных потоков? Это конкретныйCollectors.toCollection(...)&nbsp;Коллекционер, который заставляет столкнуться с порядком?