क्या स्ट्रीम में इंडेक्स तक पहुंच प्राप्त करते हुए एक धारा पर पुनरावृति करने का एक संक्षिप्त तरीका है?
String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};
List<String> nameList;
Stream<Integer> indices = intRange(1, names.length).boxed();
nameList = zip(indices, stream(names), SimpleEntry::new)
.filter(e -> e.getValue().length() <= e.getKey())
.map(Entry::getValue)
.collect(toList());
जो वहां दिए गए LINQ उदाहरण की तुलना में निराशाजनक लगता है
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
क्या अधिक संक्षिप्त तरीका है?
इसके अलावा ऐसा लगता है कि ज़िप या तो हटा दिया गया है या हटा दिया गया है ...
IntStream.rangeClosed(x, y)
।
List<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
zip
प्रायोगिक दो-मूल्यवान धाराओं के साथ हटा दिया गया था, जिसे विभिन्न रूप से कहा जाता है BiStream
या MapStream
। मुख्य समस्या यह है कि इसे प्रभावी ढंग से करने के लिए जावा को वास्तव में एक संरचनात्मक रूप से टाइप की गई जोड़ी (या ट्यूपल) प्रकार की आवश्यकता है। एक को खो देना, एक सामान्य जोड़ी या टपल क्लास बनाना आसान है - यह कई बार किया गया है - लेकिन वे सभी एक ही प्रकार से मिटा देते हैं।
intRange()
? जावा 8 में अब तक इस पद्धति का विस्तार नहीं हुआ है।