java - 如何迭代 StaxEventItemReader/itemreader?
问题描述
目前我想访问 StaxEventItemReader 中的对象。这是通过使用 StaxEventItemReader.read() 完成的(xml 文件有 50 个对象/项目),这样我就可以对这些对象做一些事情。
问题是如何正确迭代 StaxEventItemReader 的项目?
最初我有这样的事情:
while (objectStaxEventItemReader.read() != null) {
invokeRandomMethod(objectStaxEventItemReader.read());
}
问题是 read() “读取一段输入数据并前进到下一个”(Doc)。所以最后只处理了 25 个项目,因为空检查也推进了“迭代器”。所以空检查似乎是不可能的。
目前我只有一个临时解决方案(使用 for 循环):
for (int i = 0; i < 50; i++) {
invokeRandomMethod(objectStaxEventItemReader.read());
}
读取所有 50 个对象,但这不是一个令人满意的解决方案,因为我必须指定有 50 个元素。
我试图环顾四周,发现 PeekableItemReader ( Doc ) 的 peek 方法可能有用,但它是 itemreader 的子接口,所以我不能将它与仅实现 itemreader 的 StaxEventItemReader 一起使用。
有没有办法检查 null 或更好的方法来迭代 StaxEventItemReader 而不必指定元素的数量?
解决方案
var sentinel = objectStaxEventItemReader.read();
while(sentinel != null) {
invokeRandomMethod(sentinel);
sentinel = objectStaxEventItemReader.read();
}
将返回值保存在变量中并检查其是否为空。
推荐阅读
- bootstrap-4 - 使用 `img-fluid` 时,Bootstrap 的 `col .col-md-4` 类不起作用
- geometry - 使用深度和法线数据查找 rgbd 图像中的所有平面
- c# - 把时间留到周日晚上 9:30
- python-3.x - tkintertable,如何阻止/禁用列或单元格
- mysql - 如何使用列表和之间选择查询
- image-processing - Chainer 自动编码器
- java - 无法使用 RecyclerAdapter 将对象转换为字符串值
- unix - 是否回显用户:通过 | /usr/sbin/chpasswd' 覆盖 root 密码?
- chainer - CuDNN 在二进制安装的 cupy 中不可用
- php - dompdf 不呈现超过 10 页的 PDF