Apakah ada cara ringkas untuk beralih di atas aliran sementara memiliki akses ke indeks di arus?
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());
yang tampaknya agak mengecewakan dibandingkan dengan contoh LINQ yang diberikan di sana
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
Apakah ada cara yang lebih ringkas?
Lebih lanjut tampaknya zip telah dipindahkan atau dihapus ...
IntStream.rangeClosed(x, y)
.
List<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
zip
telah dihapus, bersama dengan aliran dua nilai eksperimental dengan berbagai cara disebut BiStream
atau MapStream
. Masalah utama adalah bahwa untuk melakukan ini secara efektif, Java benar-benar membutuhkan tipe (atau tuple) yang diketik secara struktural. Karena tidak memiliki satu, mudah untuk membuat kelas Pair atau Tuple generik - sudah dilakukan berkali-kali - tetapi semuanya terhapus dengan tipe yang sama.
intRange()
? Belum menemukan metode ini di Java 8 sampai sekarang.