मैं जावा के स्ट्रीम के साथ प्रयोग कर रहा हूं और यह पता लगाने की कोशिश कर रहा हूं कि क्या संभव है और साथ ही उनकी ताकत और कमजोरियां भी हैं। वर्तमान में मैं एक धारा का उपयोग करके एराटोस्टेनेस की चाकू को लागू करने की कोशिश कर रहा हूं, लेकिन उन्हें पहले से फ़िल्टर किए गए मूल्यों के माध्यम से अलग संग्रह में संग्रहीत किए बिना लूप करने का एक अच्छा तरीका नहीं दिख रहा है। के एक वांछित आउटपुट के साथजावा स्ट्रीम - पहले फ़िल्टर किए गए मानों पर फ़िल्टरिंग
IntStream myStream = IntStream.range(0,3);
myStream.filter(s -> {
System.out.print("[filtering "+s+"] ");
myStream.forEach(q -> System.out.print(q+", "));
System.out.println();
return true; //eventually respond to values observed on the line above
});
:
मैं कुछ इस तरह पूरा करने के लिए इच्छुक हूँ
[filtering 0]
[filtering 1] 0,
[filtering 2] 0, 1,
[filtering 3] 0, 1, 2,
ध्यान दें कि प्रत्येक नए मूल्य को छानने, जबकि सभी पूर्व में फ़िल्टर मूल्यों मनाया जाता है। यह एराटोस्टेनेस की चलनी के आसान कार्यान्वयन की अनुमति देगा क्योंकि मैं सभी गैर-प्राइम मानों को फ़िल्टर कर सकता हूं और प्रत्येक नए मूल्य के लिए पहले से ही प्राइम फ़िल्टर पास करने वाले सभी नंबरों के खिलाफ विभाज्यता की जांच कर सकता हूं।
local variables referenced from a lambda expression must be final or effectively final
इसका कारण यह है कि मैं एक फिल्टर है कि पहले से ही myStream पर अभिनय के भीतर myStream संदर्भित कर रहा हूँ हो गया लगता है:
हालांकि, ऊपर के उदाहरण मुझे NetBeans में एक त्रुटि देता है। क्या इस त्रुटि के आसपास काम करने का कोई अच्छा तरीका है (यानी स्ट्रीम की अंतिम प्रतिलिपि बनाना जिसमें केवल अब तक फ़िल्टर किए गए मान हैं), या स्टोर के लिए एक अलग संग्रह का उपयोग किए बिना इस तरह की समस्या का बेहतर दृष्टिकोण है मान?
नहीं, एक अलग संग्रह का उपयोग करने से बेहतर दृष्टिकोण नहीं है। स्ट्रीम एपीआई उस तरह के उपयोग के लिए डिज़ाइन नहीं किया गया है। –
आपके पास कोड के साथ, आप 'अंतिम 'कीवर्ड को' इंटस्ट्रीम myStream' से पहले रख सकते हैं। लेकिन कोड वैसे भी सही नहीं होगा, क्योंकि आपको दूसरी पंक्ति को 'myStream = myStream.filter (...)' में बदलने की आवश्यकता है, अन्यथा आप फ़िल्टरिंग के बिना स्ट्रीम का उपयोग करेंगे। –
http: // stackoverflow।कॉम/ए/20007272/2711488 दूसरा आधा ... – Holger