Состояние javadoc для Stream:
Потоки имеют метод BaseStream.close() и реализуют AutoCloseable, но почти все потоковые экземпляры фактически не нужно закрывать после использования. Как правило, только потоки, источник которых является каналом ввода-вывода (например, те, которые возвращаются файлами Files.lines(Path, Charset)), требуют закрытия. Большинство потоков поддерживаются коллекциями, массивами или генерирующими функциями, которые не требуют специального управления ресурсами. (Если поток требует закрытия, он может быть объявлен как ресурс в инструкции try-with-resources.)
Поэтому в большинстве случаев можно использовать потоки в однострочном пространстве, например collection.stream().forEach(System.out::println);
, но для Files.lines
и других потоков с поддержкой ресурсов, необходимо использовать оператор try-with-resources или утечку ресурсы.
Это поражает меня как подверженного ошибкам и ненужного. Поскольку Streams можно только повторить один раз, мне кажется, что нет ситуации, когда вывод Files.lines
не должен быть закрыт, как только он был повторен, и поэтому реализация должна просто вызвать неявно в конце любая операция терминала. Я ошибаюсь?