धारा
उत्तर
आप इस तरह एक कस्टम कलेक्टर लिख सकते हैं:
public static <T> Collector<T, ?, List<T>> lastN(int n) {
return Collector.<T, Deque<T>, List<T>>of(ArrayDeque::new, (acc, t) -> {
if(acc.size() == n)
acc.pollFirst();
acc.add(t);
}, (acc1, acc2) -> {
while(acc2.size() < n && !acc1.isEmpty()) {
acc2.addFirst(acc1.pollLast());
}
return acc2;
}, ArrayList<T>::new);
}
और इस तरह इसका इस्तेमाल:
List<String> lastTen = input.stream().collect(lastN(10));
आपको 'ArrayList
@ होल्गर, पहले मैंने 'अरेरेलिस्ट :: नया' लिखा था, लेकिन ग्रहण ने अनचेक कन्स्ट्रक्टर के बारे में चेतावनी प्रदर्शित की थी। खैर, शायद यह एक ईसीजे-विशिष्ट समस्या है। –
दिलचस्प बात यह है कि 'ArrayDeque :: new' को एक प्रकार के गवाह से फायदा होगा, क्योंकि 'ArrayDeque
उपयोग Stream.skip()
धारा के पहले n तत्वों की निकालने के बाद इस धारा के शेष तत्वों से मिलकर एक धारा देता है। यदि इस स्ट्रीम में एन तत्वों से कम है तो एक खाली स्ट्रीम वापस कर दी जाएगी।
all.stream().skip(Math.max(0, all.size() - n)).forEach(doSomething);
मामले में धारा अज्ञात आकार की है, वहाँ शायद कोई रास्ता नहीं चारों ओर पूरे धारा लगता है और पिछले n
तत्वों अब तक का सामना करना पड़ा बफरिंग है। आप इसे किसी प्रकार का डेक, या एक विशेष रिंग-बफर स्वचालित रूप से अपने अधिकतम आकार को बनाए रखने के द्वारा कर सकते हैं (कुछ कार्यान्वयन के लिए this related question देखें)।
public static <T> List<T> lastN(Stream<T> stream, int n) {
Deque<T> result = new ArrayDeque<>(n);
stream.forEachOrdered(x -> {
if (result.size() == n) {
result.pop();
}
result.add(x);
});
return new ArrayList<>(result);
}
उन कार्यों के सभी (size
, pop
, add
) की जटिलता होना चाहिए हे (1), इसलिए साथ (अज्ञात) लंबाई एक धारा के लिए समग्र जटिलता nO (n होगा)।
- 1. धारा
- 2. धारा
- 3. धारा
- 4. धारा
- 5. धारा
- 6. धारा
- 7. धारा
- 8. धारा
- 9. धारा
- 10. धारा
- 11. धारा
- 12. सी ++ कस्टम धारा जोड़तोड़ कि धारा
- 13. आरटीपी धारा
- 14. यदि धारा
- 15. समांतर धारा
- 16. सी # - धारा
- 17. नोडजेएस: धारा
- 18. कैसे धारा
- 19. एकल धारा
- 20. धारा ऑपरेटर
- 21. आंशिक धारा
- 22. धारा दो बार पढ़ना?
- 23. जावा 8 धारा, देश
- 24. जावा धारा अप्रत्याशित परिणाम
- 25. धारा बनाम monads
- 26. जावा 8 धारा
- 27. जावा अंत में धारा
- 28. HTTPS धारा रैपर
- 29. छिपाएं धारा छाया
- 30. एक अक्का धारा
मुझे नहीं लगता कि यह आम तौर पर धाराओं के साथ संभव है, एक धारा के आकार के रूप में नहीं हो सकता है एक प्राथमिकता ज्ञात हो, या यह अनंत भी हो सकता है। और यदि आप किसी सूची से स्ट्रीम बनाते हैं, तो आपने जैसा ही किया है, केवल उपन्यास का उपयोग करें। –
@tobias_k ओपी में एक सीमित सूची है हालांकि ... – Puce
यदि आपके पास पहले से कोई सूची है, तो 'सबलिस्ट' जाने का तरीका है। फिर आप इसे कॉपी कर सकते हैं, इसे स्ट्रीम कर सकते हैं, जो कुछ भी आप चाहते हैं। –