結論: IOソースをベースにしている場合は明示的にcloseを呼ぶ必要がある。
まえがき
Stream<T>
は大別するとSet<T>
やList<T>
、Map<K, V>
といったcloseする必要がないソースと、BufferedReader
やBufferedInputStream
などのIOのIをベースにした**使い終わったらcloseする必要があるソースに分けられる。
StreamはCloseable
を継承しているが、明示的にcloseする必要があるかはソースに依存する。言い換えると、IOソースから得たStreamはtry-with-resources構文などで閉じ忘れを防ぐ必要がある。
そうしないと、メモリリークの可能性がある。