¿Hay una manera concisa de iterar sobre una secuencia mientras se tiene acceso al índice en la secuencia?
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());
lo que parece bastante decepcionante en comparación con el ejemplo LINQ dado allí
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
¿Hay una manera más concisa?
Además, parece que la cremallera se ha movido o se ha eliminado ...
IntStream.rangeClosed(x, y).
List<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
zipse eliminó, junto con secuencias experimentales de dos valores denominadas de forma diferente BiStreamo MapStream. El principal problema es que para hacer esto efectivamente, Java realmente necesita un tipo de par (o tupla) estructuralmente tipado. A falta de uno, es fácil crear una clase genérica de pares o tuplas, se ha hecho muchas veces, pero todas se borran del mismo tipo.
intRange()? No he encontrado este método en Java 8 hasta ahora.