यदि java 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
आपके मौजूदा कोड में क्या गलत है?
एंडी टर्नर

@AndyTurner सहमत हैं। कोड अच्छा है जैसा कि यह है। केवल सुधार मैं इफ - स्टेटमेंट के बजाय टर्नरी ऑपरेटर का उपयोग कर रहा हूं । हालांकि यह अभी भी स्वाद का मामला है।
ईटीओ

@ETO कुछ भी गलत नहीं है, लेकिन मैं यह जानने की कोशिश कर रहा था कि क्या यह स्पष्ट स्थिति जाँच के साथ स्ट्रीम एपीआई का उपयोग करने का एक तरीका है। उत्तर के लिए धन्यवाद - मुझे टर्नरी ऑपरेटर का सुझाव पसंद है।
user3495691

जवाबों:


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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.