Jer*_*oen 6 java java-8 java-stream
Java Stream.forEach函数有一个严重的限制,即它的消费者不可能抛出已检查的异常.因此,我想逐个访问Stream的元素.
我想做这样的事情:
while(true) {
Optional<String> optNewString = myStream.findAny();
if (optNewString.isPresent())
doStuff(optNewString.get());
else
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,findAny是一种短路终端操作.也就是说,它会关闭流.此代码将在while循环的第二次迭代时崩溃.我不能简单地将所有元素放在一个数组中,并逐个遍历该数组,因为可能存在数千万个元素.
请注意我不会问如何从内部抛出异常forEach.这个问题已经得到解答.
Jon*_*eet 11
要逐个元素地迭代流,只需调用iterator()方法:
Iterator<String> iterator = stream.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
// Use element
}
Run Code Online (Sandbox Code Playgroud)
目前还不清楚在检查异常方面对你有多大帮助,值得注意的是它是一个终端操作 - 一旦你使用了迭代器,你需要获得一个新的流,如果你想再次迭代 - 但是它确实回答了如何一次读取一个元素的问题.
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |