প্রবাহের
জাভা 8 এর আগে
for (Direction dir : Direction.values()) {
System.out.println(dir);
}
জাভা 8
আমরা ল্যাম্বদা এবং স্ট্রিমগুলিও ব্যবহার করতে পারি ( টিউটোরিয়াল ):
Stream.of(Direction.values()).forEachOrdered(System.out::println);
কেন forEachOrdered
এবং forEach
স্ট্রিম দিয়ে নয় ?
এর আচরণটি forEach
সুস্পষ্টভাবে নিরপেক্ষবাদী যেখানে forEachOrdered
স্ট্রিমটির প্রতিটি এনকন্টারের ক্রম হিসাবে এই স্ট্রিমের প্রতিটি উপাদানটির জন্য ক্রিয়া সম্পাদন করে যদি স্ট্রিমটির একটি সংজ্ঞায়িত ক্রম থাকে order সুতরাং forEach
আদেশ রাখা হবে যে গ্যারান্টি দেয় না।
এছাড়াও স্ট্রিমগুলির সাথে কাজ করার সময় (বিশেষত সমান্তরালগুলি) স্ট্রিমের প্রকৃতি মনে রাখে। অনুযায়ী ডক :
স্ট্রিম পাইপলাইন ফলাফলগুলি নির্বিচারে বা ভুল হতে পারে যদি স্ট্রিম ক্রিয়াকলাপের আচরণগত পরামিতিগুলি রাষ্ট্রীয় হয়। একটি রাষ্ট্রীয় ল্যাম্বডা হ'ল যার ফলশ্রুতি কোনও স্ট্রিমের উপর নির্ভর করে যা স্ট্রিম পাইপলাইন প্রয়োগের সময় পরিবর্তিত হতে পারে।
Set<Integer> seen = Collections.synchronizedSet(new HashSet<>());
stream.parallel().map(e -> { if (seen.add(e)) return 0; else return e; })...
এখানে, যদি ম্যাপিং অপারেশনটি সমান্তরালভাবে সম্পাদিত হয় তবে থ্রেড শিডিয়ুলিং পার্থক্যের কারণে একই ইনপুটটির ফলাফল রান থেকে চালানোতে পৃথক হতে পারে, অন্যদিকে, রাষ্ট্রবিহীন ল্যাম্বডা অভিব্যক্তির সাহায্যে ফলাফল সর্বদা একই থাকে।
স্ট্রিম অপারেশনের আচরণগত পরামিতিগুলির পার্শ্ব-প্রতিক্রিয়াগুলি সাধারণভাবে নিরুৎসাহিত করা হয় কারণ তারা প্রায়শই রাষ্ট্রহীনতার প্রয়োজনীয়তার অযাচিত লঙ্ঘন হতে পারে, পাশাপাশি থ্রেড-সুরক্ষা অন্যান্য ঝুঁকির কারণ হতে পারে।
স্ট্রিমগুলির সংজ্ঞাযুক্ত অর্ডার থাকতে পারে এবং নাও থাকতে পারে। কোনও স্ট্রিমের একটি এনকাউন্টার অর্ডার রয়েছে কিনা তা উত্স এবং মধ্যবর্তী ক্রিয়াকলাপগুলির উপর নির্ভর করে।