Gibt es eine kurze Form der Iteration über einen stream mit Indizes in Java 8?

Gibt es eine prägnante Art und Weise zu Durchlaufen, über einen Bach, während er den Zugang zu dem index in den stream???

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());

scheint eher enttäuschend im Vergleich zu den LINQ-Beispiel gegeben es

string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();

Gibt es einen kürzeren Weg?

Weiter es scheint, der Reißverschluss hat sich entweder verschoben oder entfernt worden...

Was ist intRange()? Kommen noch nicht über diese Methode in Java 8, bis jetzt.
Wahrscheinlich ein IntStream.rangeClosed(x, y).
Als eine Randnotiz, Herausforderung 4 sieht besser aus (IMO) mit List<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
Ja, zip wurde entfernt, zusammen mit experimentellen zwei-geschätzt-streams verschiedenartig genannt BiStream oder MapStream. Das Hauptproblem ist, dass dies effektiv zu tun Java braucht wirklich eine statisch typisierte-pair-Mädchen (oder Tupel) geben. Fehlt eins, es ist ganz einfach erstellen Sie eine generische Paar oder Tupel-Klasse-es ist schon viele Male getan-aber Sie alle löschen, um den gleichen Typ.
Ach ja, ein weiteres problem mit einem generic-Pair-oder Tuple-Klasse ist, dass es erfordert, dass alle primitiven geschachtelt werden.

InformationsquelleAutor Graeme Moss | 2013-08-31

Schreibe einen Kommentar