मेरे पास निम्नलिखित कोड है जो 300 से अधिक कैलोरी वाले संग्रह में पहले 3 तत्वों के नाम खोजने के लिए स्ट्रीम एपीआई का उपयोग करता है:

List<Dish> dishes = ....
List<String> unhealthyDishes = dishes.stream()
                                     .filter(dish -> dish.getCalories() > 300)
                                     .map(dish -> dish.getName())
                                     .limit(3)
                                     .collect(Collectors.toList());

पारंपरिक इटरेटर आधारित अनिवार्य दृष्टिकोण में, मैं परिणामों की गिनती रख सकता हूं और इसलिए तत्वों की आवश्यक संख्या प्राप्त करने के बाद पुनरावृत्ति लूप से बाहर निकल सकता हूं। लेकिन उपरोक्त कोड संग्रह की पूरी लंबाई के माध्यम से जाना प्रतीत होता है। मैं इसे ऐसा करने से कैसे रोक सकता हूं और एक बार मुझे 3 तत्व मिल जाने के बाद रोक सकते हैं?

-1
Mandroid 26 जुलाई 2020, 13:07

1 उत्तर

सबसे बढ़िया उत्तर

आप कैसे जानते हैं कि यह अन्य तत्वों की भी जाँच करता है? मैंने अभी यह छोटा परीक्षण स्थापित किया है:

String[] words = {"a", "a", "a", "aa"};
        
List<Integer> shortWords = Arrays.stream(words)
     .filter(word -> {
             System.out.println("checking " + word);
             return word.length() == 1;
             })
     .map(String::length)
     .limit(3)
     .collect(Collectors.toList());
        
System.out.println(shortWords);

और आउटपुट था:

checking a
checking a
checking a
[1, 1, 1]
1
tdranv 26 जुलाई 2020, 13:14