ডিফল্ট তালিকাটি ফেরত দিচ্ছেন যদি জাভা 8 স্ট্রিম ব্যবহার করে তালিকাটি খালি থাকে?


9

কোনও উপায় আছে যাতে নীচে স্ট্রিম ক্রিয়াকলাপগুলির একটি সেট হিসাবে সম্পাদন করা যায়, স্পষ্টভাবে পরীক্ষা করার পরিবর্তে প্রস্তাবিত পণ্যগুলি খালি রয়েছে কিনা তারপরে ডিফল্ট তালিকাটি ফেরান অন্য ফিল্টারড তালিকাটি ফেরত দিন ?

public List<Product> getRecommendedProducts() {
    List<Product> recommendedProducts 
        = this.newProducts
              .stream()
              .filter(isAvailable)
              .collect(Collectors.toList());

    if (recommendedProducts.isEmpty()) {
        return DEFAULT_PRODUCTS;
    }

    return recommededProducts;
}

4
আপনার বিদ্যমান কোডটিতে কী সমস্যা?
অ্যান্ডি টার্নার

@ অ্যান্টিটারার সম্মত কোডটি যেমন হয় ঠিক তেমন। আমি কেবলমাত্র উন্নতি করব যদি অন্য বিবৃতিটির পরিবর্তে টের্নারি অপারেটর ব্যবহার করা হয় । এটি এখনও স্বাদের বিষয়।
ETO

@ETO তেমন কোনও ভুল নেই, তবে আমি কেবল স্ট্রিম এপিআইগুলি সুস্পষ্ট শর্ত পরীক্ষার সাহায্যে এটি করার কোনও উপায় আছে কিনা তা খুঁজে বের করার / চেষ্টা করার চেষ্টা করছিলাম। উত্তরের জন্য ধন্যবাদ - আমি টার্নারি অপারেটরের পরামর্শটি পছন্দ করি।
ব্যবহারকারী 3495691

উত্তর:


5

আপনি এটি চেষ্টা করতে পারেন:

List<Product> recommendedProducts 
        = this.newProducts
              .stream()
              .filter(isAvailable)
              .collect(Collectors.collectingAndThen(Collectors.toList(), list -> list.isEmpty() ? DEFAULT_PRODUCTS : list));

5

আপনি ব্যবহার করে আপনার লক্ষ্য অর্জন করতে পারে Optional , আমি এখনও সাধারণ প্লেইন টেরিনারি অপারেটরটি বেছে নেব।

এই বিশেষ ক্ষেত্রে এটি আরও বেশি অর্থবোধ করে এবং পাঠযোগ্যতার উন্নতি করে:

return recommendedProducts.isEmpty() ? DEFAULT_PRODUCTS : recommendedProducts;

4

হ্যাঁ ব্যবহার করে Optional

return Optional.of(this.newProducts.stream()
                                   .filter(isAvailable)
                                   .collect(Collectors.toList()))
                    .filter(l->!l.isEmpty())
                    .orElse(DEFAULT_PRODUCTS);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.