java - 如何逐条读取一个 Stream?

标签 java java-8 java-stream

Java Stream.forEach函数有一个严重的限制,即它的消费者不可能抛出已检查的异常。因此,我想一个一个地访问 Stream 的元素。

我想做这样的事情:

while(true) {
    Optional<String> optNewString = myStream.findAny();

    if (optNewString.isPresent())
        doStuff(optNewString.get());
    else
        break;
}

然而,findAny是短路端子操作。也就是说,它关闭流。这段代码会在 while 循环的第二次迭代时崩溃。我不能简单地将所有元素放在一个数组中,然后一个一个地遍历该数组,因为可能有数千万个元素。

请注意,我不是在询问如何从 forEach 中抛出异常。这个问题有already been answered .

最佳答案

要逐个元素地迭代流,只需调用 iterator()方法:

Iterator<String> iterator = stream.iterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    // Use element
}

不清楚在检查异常方面对你有多大帮助,值得注意的是它是一个终端操作——一旦你使用了迭代器,如果你想迭代,你需要得到一个新的流再次 - 但它确实回答了如何一次读取流中一个元素的问题。

关于java - 如何逐条读取一个 Stream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47060918/

相关文章:

java - JMC maxage/maxsize 不起作用

java - JPA:我应该使用 orm.xml 清理我的实体类吗?

java-7 - Java-7 中的签名多态方法

java - 什么决定了从 lambda 创建哪个功能接口(interface)?

Java 8 CompletableFuture 、流和超时

java - Android 的英语到印地语音译

java - 类型开头非法(其他)

Java 8 Lambda Sort With Variable 方法引用

java - 查找Java 8时尚中的最大单词数

java - Lambda 和流(数组)