ইন্টেলিজ আইডিইএ আমাকে কেবলমাত্র জাভা 8 "ফরএচ" কল দিয়ে প্রতি লুপের জন্য প্রতিটির জন্য এখনই সুপারিশ করেছে:
for (Object o : objects) {
if (o instanceof SomeObject) {
doSomething();
}
}
প্রস্তাবিত কলটি পছন্দ করে:
objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething());
আমি যদি স্ট্রিমের অন্তর্নিহিত কার্যকারিতাটি কীভাবে কাজ করে তা ভুল বুঝি না, আমার কাছে মনে হয় যে স্ট্রিমটি প্রতিটি লুপের জন্য ও (এন) অপারেশনের বিপরীতে একটি ও (2 এন) অপারেশন।
8
আপনি কেন এটি O ^ 2 বলে মনে করেন? প্রকৃতপক্ষে, প্রবাহগুলি বিশেষত উদ্ভাবিত হয়েছিল (ক) ভাল সিনট্যাক্সের অনুমতি দেয় এবং (খ) অতিরিক্ত ওভারহেড প্রবর্তন না করে । (আসলে, তারা প্রায়শই অলস মূল্যায়নের মাধ্যমে ওভারহেড হ্রাস করে ))
—
কিলিয়ান ফথ
কেবল সিনট্যাক্সের উপর ভিত্তি করে, দেখে মনে হচ্ছে এটি ফিল্টার করার জন্য প্রথমে পুনরাবৃত্তি করছে এবং তারপরে আমার কোড চালানোর জন্য দ্বিতীয়বার ফিল্টারযুক্ত বস্তুগুলির উপরে পুনরাবৃত্তি করছে।
—
মিরানা
এমনকি যদি এটি এটি করে তবে এটি ও (2 * এন), যা হে (এন), অর্থাৎ লিনিয়ার এবং চতুর্ভুজ নয় would তবে প্রকৃতপক্ষে পুনরাবৃত্তি একে অপরের সাথে ইন্টারলিভড এবং ফলাফল ইতিমধ্যে জানা থাকলে উভয়ই তাড়াতাড়ি শেষ হতে পারে - এটাই স্রোতের সৌন্দর্য। জাভা 8 এর স্ট্রিমগুলি পড়তে 15 মিনিট ব্যয় করা অবশ্যই উপযুক্ত; যেমন ভেঙ্কট সুব্রামানিয়াম লিখেছেন, '' ল্যামডা এক্সপ্রেশন জাভা থেকে 8 গেটওয়ে ড্রাগ, কিন্তু প্রবাহের বাস্তব আসক্তি আছে। ''
—
Kilian Foth
এছাড়াও: আপনার লুপটি একটি অ্যান্টিপ্যাটার্ন;)
—
থমাস জাঙ্ক
@ থমাস জাঙ্ক আপনি কীভাবে এটি একটি অ্যান্টিপ্যাটার্ন ব্যাখ্যা করতে পারেন? আমি এটার সাথে পরিচিত নই।
—
মিরানা