2016-08-01 33 views
12

बंद करें यदि हम जावा 8 स्ट्रीम का उपयोग करते हैं जैसे list.stream().filter(....).collect(..)..... यह स्ट्रीम कब बंद है?जावा 8 स्ट्रीम

क्या यह अच्छा अभ्यास है कि हम हमें अगले उदाहरण के रूप में स्ट्रीम बंद कर देते हैं?

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

डॉक्स से: स्ट्रीम एक BaseStream.close() विधि है और AutoCloseable लागू है, लेकिन लगभग सभी धारा उदाहरणों वास्तव में उपयोग के बाद बंद कर दिया की जरूरत नहीं है। आम तौर पर, केवल स्ट्रीम जिनके स्रोत एक आईओ चैनल है (जैसे फाइल.लाइन (पथ, वर्णसेट) द्वारा लौटाए गए लोगों को बंद करने की आवश्यकता होगी। अधिकांश धाराओं को संग्रह, सरणी या उत्पन्न कार्यों द्वारा समर्थित किया जाता है, जिसके लिए कोई विशेष संसाधन प्रबंधन की आवश्यकता नहीं होती है। (यदि किसी स्ट्रीम को बंद करने की आवश्यकता होती है, तो इसे संसाधन-संसाधन-संसाधन विवरण में संसाधन के रूप में घोषित किया जा सकता है।) – Matt

+0

मुझे नहीं लगता कि आपको उस "स्ट्रीम" को बंद करने की आवश्यकता है ^) – injecteer

+3

सामान्य रूप से स्ट्रीम होने की आवश्यकता नहीं है बन्द है। केवल कुछ स्ट्रीम जो 'DirectoryStream' जैसे resouces तक पहुंचने की आवश्यकता है, को बंद करने की आवश्यकता है। ऐसा करने का सबसे अच्छा तरीका एक [प्रयास के साथ संसाधन] (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) कथन का उपयोग कर है। – Jesper

उत्तर

22

आम तौर पर धाराओं को बंद करना आवश्यक नहीं है। आपको केवल उन संसाधनों को बंद करने की आवश्यकता है जो आईओ संसाधनों का उपयोग करते हैं।

Stream documentation से:

स्ट्रीम एक BaseStream.close() विधि है और AutoCloseable लागू है, लेकिन लगभग सभी धारा उदाहरणों वास्तव में उपयोग के बाद बंद कर दिया की जरूरत नहीं है। आम तौर पर, केवल स्ट्रीम जिनके स्रोत एक आईओ चैनल है (जैसे Files.lines(Path, Charset) द्वारा लौटाए गए) को बंद करने की आवश्यकता होगी। अधिकांश धाराओं को संग्रह, सरणी या उत्पन्न कार्यों द्वारा समर्थित किया जाता है, जिसके लिए कोई विशेष संसाधन प्रबंधन की आवश्यकता नहीं होती है। (एक धारा समापन की आवश्यकता होती है, तो यह एक कोशिश के साथ-संसाधनों बयान में एक संसाधन के रूप में घोषित किया जा सकता है।)

आप एक धारा को बंद करने की जरूरत है, तो सबसे अच्छा अभ्यास कोशिश उपयोग करने के लिए किया जाएगा -साथ-संसाधनों बयान:

try (Stream<String> stream = Files.lines(path, charset)) { 
    // do something 
} 
संबंधित मुद्दे