TL; DR; Я ищу место, где я могу найти, есть ли какая-то промежуточная или терминальная операция. Где я могу найти такую документацию?
Фон
документация пакета говорит:
Независимо от того, имеет ли поток порядок встреч, зависит от источника и промежуточных операций
Что повторяется в qaru.site/info/93156/...
Чтобы обеспечить поддержание порядка заказа в течение всей операции потока, вам необходимо изучить документацию источника потоков, все промежуточные операции и операцию терминала для того, поддерживают ли они порядок или нет (или источник имеет порядок в первую очередь).
Это хорошо и хорошо, но на какую документацию я должен смотреть? документация по упаковке упоминает в примере, что map
гарантирует упорядочение, но у него нет исчерпывающего списка. javadoc для класса Stream документирует некоторые промежуточные операции, но не все.
Возьмем, например, map
:
Возвращает поток, состоящий из результатов применения данной функции к элементам этого потока.
Это промежуточная операция.
или filter
Возвращает поток, состоящий из элементов этого потока, которые соответствуют данному предикату.
Это промежуточная операция.
Ни один из них не описывает, сохраняют ли они порядок.
qaru.site/info/505490/... утверждает:
Фактически каждая промежуточная операция сохраняет порядок по умолчанию. Единственными исключениями являются:
- unordered(), который удаляет ограничение порядка.
- sorted(), который изменяет порядок.
Если он явно не указан, вы можете предположить, что операция сохраняет порядок. Даже отдельный() сохраняет порядок, хотя он добавляет много сложности для параллельного потока.
но есть ли официальная документация для этого?
Дополнительный кредит 😉
На самом деле есть две отдельные проблемы с порядком.
- Выполняет ли вывод операции тот же порядок, что и вход?
- Выполняется ли операция в каждом элементе в порядке.
Например, параллельная операция map
может перемещаться по всем элементам в произвольном порядке (нарушая 2.), но все равно поддерживать порядок в возвращенном потоке (подчиняясь 1.)