有没有一种简洁的方法在迭代流时访问流中的索引?
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());
与那里给出的LINQ示例相比,这似乎令人失望
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
有更简洁的方法吗?
另外,似乎该zip文件已经移动或被删除...
intRange()
是什么?我在 Java 8 中还没有遇到过这个方法。 (翻译者注:原文中的 "accross" 应为 "across",已进行修正。) - Rohit JainIntStream.rangeClosed(x, y)
。 - assyliasList<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
更好地完成挑战4。 - assyliaszip
已经被移除了,还有实验性质的双值流,也称为BiStream
或MapStream
。主要问题在于,为了有效地执行此操作,Java 确实需要一个结构类型的二元组(或元组)类型。由于缺乏这样一个类型,很容易创建一个通用的 Pair 或 Tuple 类 - 这已经做过很多次了 - 但它们都会被擦除到相同的类型。 - Stuart Marks