在访问流中的索引时,有没有一种简洁的方法可以在流中进行迭代?

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();

有没有更简洁的方法?

更进一步看起来拉链不是动了就是被移走了.

推荐答案

最干净的方法是从索引流开始:

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".


当您习惯于for循环时,另一种看起来更熟悉的方法是使用可变对象(例如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());

注意这个using the latter method on a parallel stream could break as the items would not necesarily be processed "in order".

Java相关问答推荐

javafx getHostServices(). showDocument()调出Chrome而不是默认浏览器(Linux)

Cosmos Change Feed Process Lag远远超过收集中的记录数量

将linkedHashMap扩展到Java中的POJO类

屏蔽字母数字代码的Java正则表达式

无法在org. openjfx:javafx—fxml:21的下列变体之间进行 Select

需要一个找不到的jakarta.sistence.EntityManager类型的Bean

如何使用AWS CLI从S3存储桶中的所有对象中删除用户定义的元数据?

R.id.main给我一个红色错误,无法解析MainActivity.java中的符号main

Java编译器抛出可能未正确初始化的错误?

我不能再在Android Studio Hedgehog上用Java语言创建新项目了吗?

带错误BER验证的itext8签名返回pdf

匹配一组字符或另一组字符

每次FXMLLoader调用ApplationConext.getBean(类)时创建@Component的新实例

try 将JSON字符串响应从API转换为映射字符串、对象>;时出错

如何将Pane的图像快照保存为BMP?

将双倍转换为百分比

从12小时开始的日期模式

如何在特定关键字后提取与模式匹配的多个值?

如何用Micrometer&;斯普肯

使用原子整数的共享计数器并发增量