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());
zipwurde entfernt, zusammen mit experimentellen zweiwertigen Streams, die unterschiedlich als BiStreamoder 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.