В отличие от пустых коллекций, потоки являются изменяемыми , даже пустой поток.
Например, Stream
имеет метод close()
, который изменяет свое состояние. Спецификация требует, чтобы
При работе с потоком после его закрытия возникло исключение IllegalStateException.
В нем также говорится, что
Поток должен работать (вызывая промежуточную или терминальную операцию потока) только один раз. Это исключает, например, «разветвленные» потоки, где один и тот же источник передает два или более конвейеров или несколько обходов одного и того же потока. Реализация потока может вызвать исключение IllegalStateException, если обнаружит, что поток используется повторно.
Это означает, что кэширование экземпляра потока не имеет смысла, поскольку поток не может быть повторно использован в любом случае.