最干净的方法是从索引流开始:
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());结果列表仅包含“ Erik”。
当你习惯于循环时,一种看起来更熟悉的替代方法是使用可变对象维护临时计数器,例如
AtomicInteger:
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());注意,在并行流上使用后一种方法可能会中断,因为不必“按顺序”处理项目。



