มีวิธีรัดกุมในการวนซ้ำสตรีมในขณะที่สามารถเข้าถึงดัชนีในสตรีมได้หรือไม่
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
ปัญหาหลักคือการทำเช่นนี้ได้อย่างมีประสิทธิภาพ Java ต้องการประเภทคู่ (หรือทูเปิล) ที่มีโครงสร้างจริงๆ หากขาดไปแล้วมันเป็นเรื่องง่ายที่จะสร้างคลาส Pair หรือ Tuple สามัญ - ทำได้หลายครั้ง - แต่พวกเขาทั้งหมดจะลบประเภทเดียวกัน
intRange()
อะไร ยังไม่ได้ใช้วิธีนี้ใน Java 8 จนถึงตอนนี้