Подтвердить что ты не робот

Карта потока Java и сбор - порядок получаемого контейнера

List<MyObject> myList = new ArrayList<>(); 
//populate myList here

List<String> nameList = myList.stream()
        .map(MyObject::getName)
        .collect(Collectors.toList());

В приведенном выше коде я могу ожидать, что порядок имен MyObject в nameList всегда совпадает с порядком myList?

4b9b3361

Ответ 1

Да, вы можете ожидать этого, даже если вы используете параллельный поток, если вы явно не преобразовали его в режим unordered().

Порядок не меняется в последовательном режиме, но может меняться в параллельном режиме. Поток становится неупорядоченным:

  • Если вы явно включите его в неупорядоченный режим через unordered() вызов
  • Если источник потока сообщает, что он неупорядочен (например, поток HashSet неупорядочен, поскольку порядок зависит от реализации, и вы не можете полагаться на него)
  • Если вы используете работу с неупорядоченным терминалом (например, forEach() операция или сбор в неупорядоченный сборник, например toSet())

В вашем случае ни одно из этих условий не было выполнено, поэтому ваш поток упорядочен.