जावा 8 में हमारे पास क्लास स्ट्रीम <टी> है , जो उत्सुकता से एक विधि है
Iterator<T> iterator()
तो आप उम्मीद करेंगे कि यह इंटरफ़ेस Iterable <T> को लागू करे , जिसके लिए इस पद्धति की आवश्यकता है, लेकिन ऐसा नहीं है।
जब मैं एक फॉरेस्ट लूप का उपयोग करके स्ट्रीम पर पुनरावृति करना चाहता हूं, तो मुझे कुछ ऐसा करना होगा
public static Iterable<T> getIterable(Stream<T> s) {
return new Iterable<T> {
@Override
public Iterator<T> iterator() {
return s.iterator();
}
};
}
for (T element : getIterable(s)) { ... }
क्या मुझसे कोई चूक हो रही है?
Stream
लिए विरासत एपीआई को पास करने की जरूरत है जो उम्मीद करता हैIterable
getIterable()
करने के लिएreturn s::iterator;
for (T element : stream::iterator)
, इसलिए मैं अभी भी पसंद करूंगा अगर स्ट्रीम भी लागू होगी Iterable
या एक विधि toIterable()
।