Existe-t-il un moyen concis d'itérer sur un flux tout en ayant accès à l'index dans le flux?
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());
ce qui semble plutôt décevant par rapport à l'exemple LINQ qui y est donné
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
Existe-t-il un moyen plus concis?
De plus, il semble que le zip a été déplacé ou supprimé ...
IntStream.rangeClosed(x, y)
.
List<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
zip
été supprimé, ainsi que les flux expérimentaux à deux valeurs, appelés BiStream
ou ou MapStream
. Le problème principal est que pour le faire efficacement, Java a vraiment besoin d'un type de paire (ou tuple) typé structurellement. À défaut, il est facile de créer une classe Pair ou Tuple générique - cela a été fait plusieurs fois - mais ils effacent tous le même type.
intRange()
? Je n'ai pas rencontré cette méthode dans Java 8 jusqu'à présent.