সংগ্রহ.প্রবাহ ()। ফিল্টার ()। ForEach () প্রতিটি লুপের জন্য একটি মানের তুলনায় অক্ষম?


15

ইন্টেলিজ আইডিইএ আমাকে কেবলমাত্র জাভা 8 "ফরএচ" কল দিয়ে প্রতি লুপের জন্য প্রতিটির জন্য এখনই সুপারিশ করেছে:

    for (Object o : objects) {
        if (o instanceof SomeObject) {
            doSomething();
        }
    }

প্রস্তাবিত কলটি পছন্দ করে:

objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething());

আমি যদি স্ট্রিমের অন্তর্নিহিত কার্যকারিতাটি কীভাবে কাজ করে তা ভুল বুঝি না, আমার কাছে মনে হয় যে স্ট্রিমটি প্রতিটি লুপের জন্য ও (এন) অপারেশনের বিপরীতে একটি ও (2 এন) অপারেশন।


8
আপনি কেন এটি O ^ 2 বলে মনে করেন? প্রকৃতপক্ষে, প্রবাহগুলি বিশেষত উদ্ভাবিত হয়েছিল (ক) ভাল সিনট্যাক্সের অনুমতি দেয় এবং (খ) অতিরিক্ত ওভারহেড প্রবর্তন না করে । (আসলে, তারা প্রায়শই অলস মূল্যায়নের মাধ্যমে ওভারহেড হ্রাস করে ))
কিলিয়ান ফথ

কেবল সিনট্যাক্সের উপর ভিত্তি করে, দেখে মনে হচ্ছে এটি ফিল্টার করার জন্য প্রথমে পুনরাবৃত্তি করছে এবং তারপরে আমার কোড চালানোর জন্য দ্বিতীয়বার ফিল্টারযুক্ত বস্তুগুলির উপরে পুনরাবৃত্তি করছে।
মিরানা

6
এমনকি যদি এটি এটি করে তবে এটি ও (2 * এন), যা হে (এন), অর্থাৎ লিনিয়ার এবং চতুর্ভুজ নয় would তবে প্রকৃতপক্ষে পুনরাবৃত্তি একে অপরের সাথে ইন্টারলিভড এবং ফলাফল ইতিমধ্যে জানা থাকলে উভয়ই তাড়াতাড়ি শেষ হতে পারে - এটাই স্রোতের সৌন্দর্য। জাভা 8 এর স্ট্রিমগুলি পড়তে 15 মিনিট ব্যয় করা অবশ্যই উপযুক্ত; যেমন ভেঙ্কট সুব্রামানিয়াম লিখেছেন, '' ল্যামডা এক্সপ্রেশন জাভা থেকে 8 গেটওয়ে ড্রাগ, কিন্তু প্রবাহের বাস্তব আসক্তি আছে। ''
Kilian Foth

1
এছাড়াও: আপনার লুপটি একটি অ্যান্টিপ্যাটার্ন;)
থমাস জাঙ্ক

1
@ থমাস জাঙ্ক আপনি কীভাবে এটি একটি অ্যান্টিপ্যাটার্ন ব্যাখ্যা করতে পারেন? আমি এটার সাথে পরিচিত নই।
মিরানা

উত্তর:


21

জাভা স্ট্রিমগুলি প্রতিটি বিবৃতিতে একবারে আপনার সংকলনের মাধ্যমে সিনট্যাক্সটি বোঝায় তা পুনরুক্ত হয় না। এটি প্রতিটি উপাদানের পুরো চেইন প্রয়োগ করে, একসাথে একটি উপাদান।

আপনার ক্ষেত্রে, স্ট্রিমটি ঠিক লুপের মতোই কাজ করবে। একটি উপাদান নিন, এটি আপনার প্রাকটিকেটের বিরুদ্ধে পরীক্ষা করুন এবং তারপরে আপনার ক্রিয়াকলাপটি প্রয়োগ করুন, তারপরে পরবর্তী উপাদানটিতে যান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.