স্ট্রিমের সূচকটিতে অ্যাক্সেস থাকা অবস্থায় কোনও স্ট্রিমের পুনরাবৃত্তি করার কোনও সংক্ষিপ্ত উপায় আছে কি?
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());
যা সেখানে দেওয়া লিনকু উদাহরণের তুলনায় বরং হতাশাব্যঞ্জক বলে মনে হচ্ছে
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 এ এখন পর্যন্ত এই পদ্ধতিটি পুরোপুরি আসে নি।