Stream. Что это?
Определим
Stream как свободную последовательность элементов, которая не хранит никаких данных и использует коллекции как
ресурс. Соответственно
Stream не предоставляет непосредственного доступа к данным, а дает возможность применить к ресурсу данных вычислительные операции, которые могут быть выполнены последовательно либо
параллельно. Эти вычисления в свою очередь
"ленивые" и будут выполнены только после вызова
терминальной операции.
Все вместе(ресурс данных, последовательность агрегирующих операций и терминальная операция) это называется
stream pipeline.
Stream и параллельные вычисления
В разрезе данной темы для нас важным моментом является как раз возможность выполнять вычисления параллельно. И это не требует от нас ни единой строчки многопоточного кода. Или
parallel(), когда мы работаем с готовым
stream'ом или
parallelStream(), когда создаем его сами.
Но все же интересно, как это работает.