2016-08-01 11 views
12

Java 8 Stream like list.stream().filter(....).collect(..).....を使用している場合はいつこのストリームを閉じますか?閉じるJava 8 Stream

次の例のようにストリームを閉じるとよいでしょうか?

Stream<String> stream = list.stream(); 
String result = stream.limit(10).collect(Collectors.joining("")); 
stream.close(); 
+4

ストリームからBaseStream.close()メソッドがあり、AutoCloseableが実装されていますが、ほとんどのストリームインスタンスは実際には使用後に閉じる必要はありません。通常、ソースがIOチャネルであるストリーム(Files.lines(Path、Charset)によって返されるストリームなど)のみを閉じる必要があります。ほとんどのストリームは、特別なリソース管理を必要としないコレクション、配列、または生成関数によってサポートされています。 (ストリームが終了する必要がある場合は、try-with-resourcesステートメントでリソースとして宣言できます)。 – Matt

+0

ストリームを閉じる必要はありません^) – injecteer

+3

ストリームは一般的に必須ではありません閉まっている。 'DirectoryStream'のようなリソースにアクセスするいくつかのストリームだけが閉じられる必要があります。これを実行する最善の方法は、[try-with-resources](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)ステートメントを使用することです。 – Jesper

答えて

22

ストリームをまったく閉じる必要はありません。 IOリソースを使用するストリームを閉じるだけで済みます。 Stream documentationから

ストリームはBaseStream.close()方法を持っているとAutoCloseableを実装しますが、ほぼすべてのストリーム・インスタンスは、実際に使用した後に閉じする必要はありません。一般的に、ソースがIOチャネルであるストリーム(Files.lines(Path, Charset)によって返されるストリームなど)のみがクローズする必要があります。ほとんどのストリームは、特別なリソース管理を必要としないコレクション、配列、または生成関数によってサポートされています。 (ストリームが閉鎖を要求する場合、それは、try-と資源文のリソースとして宣言することができます。)

あなたはストリームを閉じる必要があり場合は、ベストプラクティスは、tryを使用することです-with-resourcesステートメント:

関連する問題