В документах Oracle есть несколько вещей, которые я не могу полностью понять:
Operations like forEach and peek are designed for side effects;
Что они подразумевают под «разработанным»? Что особенного в этих двоих? Я могу написать свой код, чтобы любой метод потокового API работал через побочный эффект. Это полностью зависит от меня, насколько я понимаю. Более того, я обычно использую peek() для изменения состояния элемента, а не самого источника, что не делает его с состоянием или подверженным побочным эффектам.
В javadoc для forEach также говорится:
The behavior of this operation is explicitly nondeterministic.
Я понимаю, когда то же самое говорят про findAny, но что недетерминированного в forEach? Любая операция в параллельном потоке не может гарантировать упорядочение, если поток не упорядочен. Почему недетерминизм упоминается только для forEach(и finAny, но это немного другое)?
Для peek и forEach javadoc также содержит:
action may be performed at whatever time and in whatever thread the library chooses
Опять же, почему только там? Почему это не упоминается для остальных операций?
forEach
, который «предназначен для побочных эффектов», индетерминизм имеет значение и должен быть задокументирован. - person Holger   schedule 19.10.2016