В интерфейсе Stream:
Промежуточные операции классифицируются как с сохранением состояния, так и без сохранения состояния.Они влияют на результат параллельного потока.
Только две терминальные операции являются недетерминированными методами: findAny () и forEach (Consumer).Они влияют на результат параллельного потока.
Промежуточные операции без сохранения состояния могут иметь побочный эффект, если они выполняют ленивую операцию.Это влияет на результат параллельного потока.
Промежуточные операции классифицируются в:
С состоянием
- Different ()
- sorted ()
- limit (long l)
- skip (long l)
Stateless
- карта (функция f)
- flatMap (функция f)
- фильтр (предикат p)
- peek (потребитель c)
Это два моих вопроса:
Промежуточные методы без состояния
- Если я вызову промежуточные методы без состояния для параллельного потока + недетерминированный forEach (), я получу то же самоерезультат последовательного потока, но с другим порядком.
- Если я вызову промежуточные методы без состояния в параллельном потоке + недетерминированный findAny (), я получу непредсказуемый результат.
- Если я вызову промежуточные методы без состояния в параллельном потоке + нормальная работа терминала, я будуполучить тот же результат последовательного потока.
- Если я вызову промежуточные методы без состояния для параллельного потока + нормальная работа терминала с побочным эффектом, я получу непредсказуемый результат.
промежуточные методы с сохранением состояния
- Если я вызову промежуточные методы с сохранением состояния + недетерминированный метод forEach (), я получу тот же результат последовательного потока, но с другим порядком.
- Если я вызову промежуточные методы с сохранением состояния + недетерминированный findAny (), я получу непредсказуемый результат.
- Если я вызову промежуточные методы с сохранением состояния + нормальную работу терминала, я получу тот же результат последовательного потока.
Правильны ли эти правила?
Порядок элементов Stream - «порядок встречи», за исключением того, что я вызываю метод BaseStream: unordered ().Влияет ли порядок элементов на результаты потока (при наличии методов с состоянием или без состояния)?Если да, то как?
Большое спасибо!
A.