简介
在 Java 8 中迭代流时访问索引可以是这是一项繁琐的任务,尤其是与 LINQ 对应项相比。本文探讨了实现此功能的简洁有效的方法。
中间解决方案
一种方法是将索引流与元素流结合起来,使用压缩方法。但是,此方法已被移动或删除,使得此方法不太容易访问。
最干净的方法:从索引
更简化的解决方案是从索引流。这可以使用 IntStream.range() 来实现,并为过滤和映射操作提供方便的起点:
String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"}; IntStream.range(0, names.length) .filter(i -> names[i].length() <= i) .mapToObj(i -> names[i]) .collect(Collectors.toList());
使用可变索引
另一种选择是使用 AtomicInteger 等可变对象来维护临时计数器。这种方法类似于传统的 for 循环:
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());
并行流注意事项
需要注意的是,在并行流上使用后一种方法可能会引入问题,因为 items可能无法按顺序处理。
以上是如何有效地迭代 Java 8 流并访问索引?的详细内容。更多信息请关注PHP中文网其他相关文章!