
Java 8 中带索引的简明流迭代
在 Java 8 中迭代流,同时还可以访问其索引,可以使用以下方式实现有多种方法,最简单的是从索引流开始。
例如,代码下面生成从 0 到“names”数组长度的整数流,过滤掉相应字符串长度大于索引的索引,并将结果字符串收集到列表中:
1 2 3 4 5 | String[] names = { "Sam" , "Pamela" , "Dave" , "Pascal" , "Erik" };
List<String> nameList = IntStream.range(0, names.length)
.filter(i -> names[i].length() <= i)
.mapToObj(i -> names[i])
.collect(Collectors.toList());
|
登录后复制
这会导致列表仅包含“Erik”,因为其长度 (4) 小于或等于其索引 (4)。
另一种方法虽然不太简洁,但仍保留广告过滤方法内的临时计数器。但是,需要注意的是,在并行流上使用此方法可能会导致项目处理无序。
1 2 3 4 5 | String[] names = { "Sam" , "Pamela" , "Dave" , "Pascal" , "Erik" };
AtomicInteger index = new AtomicInteger();
List<String> list = Arrays.stream(names)
.filter(n -> n.length() <= index.incrementAndGet())
.collect(Collectors.toList());
|
登录后复制
以上是如何有效地迭代 Java 8 流并访问索引?的详细内容。更多信息请关注PHP中文网其他相关文章!