Параллельный поток с методом сбора()JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Параллельный поток с методом сбора()

Сообщение Anonymous »

Я пытаюсь понять, почему происходит другое, когда я меняю с y.addAll(x) на x.addAll(y) в фрагменте кода ниже:

Код: Выделить всё

List result = List.of(1, 2)
.parallelStream()
.collect(
ArrayList::new,
(x, y) -> x.add(y),
(x, y) -> y.addAll(x)
);
System.out.println(result);
Я знаю, что когда я использую ParallelStream(), одновременно выполняется более одного потока.
collect() имеет три параметра; первые два параметра я понимаю. Что касается третьего параметра, я знаю, что x, y — это подпотоки и ArrayLists, но я не понимаю, почему результаты в каждом случае разные. Я ожидал, что они будут одинаковыми.
  • (x, y) -> y.addAll(x) // вывод: [1]< /p>
  • (x, y) -> x.addAll(y) // вывод: [1, 2]


Подробнее здесь: https://stackoverflow.com/questions/788 ... ect-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»