Gibt es eine übersichtliche Möglichkeit, einen Stream zu durchlaufen, während Sie Zugriff auf den Index im Stream haben?
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());
Das scheint ziemlich enttäuschend im Vergleich zu dem dort gegebenen LINQ-Beispiel
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
Gibt es einen prägnanteren Weg?
Weiter scheint es, dass der Reißverschluss entweder bewegt oder entfernt wurde ...
IntStream.rangeClosed(x, y)
.
List<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
zip
wurde entfernt, zusammen mit experimentellen zweiwertigen Streams, die unterschiedlich als BiStream
oder bezeichnet wurden MapStream
. Das Hauptproblem besteht darin, dass Java, um dies effektiv zu tun, wirklich einen strukturell typisierten Paartyp (oder Tupeltyp) benötigt. Fehlt eine, ist es einfach, eine generische Paar- oder Tupelklasse zu erstellen - dies wurde schon oft durchgeführt -, aber alle werden auf den gleichen Typ gelöscht.
intRange()
? Ich bin bisher noch nicht auf diese Methode in Java 8 gestoßen.