如何迭代StaxEventItemReader/itemreader?



目前我想访问StaxEventItemReader内部的对象。这是通过使用StaxEventItemReader.read() (xml文件有50个对象/项)来完成的,这样我就可以对这些对象做一些事情。

问题是如何正确地迭代StaxEventItemReader的项目?

最初我是这样写的:

while (objectStaxEventItemReader.read() != null) {
invokeRandomMethod(objectStaxEventItemReader.read());
}

问题在于read()"读取一段输入数据,并推进到下一个";(医生)。所以最后只处理了25个条目,因为null检查也推进了"迭代器"。因此,空检查似乎是不可能的。

目前我只有一个临时的解决方案(使用for循环):

for (int i = 0; i < 50; i++) {
invokeRandomMethod(objectStaxEventItemReader.read());
}

所有50个对象都被读取,但这不是一个令人满意的解决方案,因为我必须指定有50个元素。

我试着环顾四周,发现PeekableItemReader (Doc)的peek方法可能是有用的,但它是itemreader的子接口,所以我不能使用它与StaxEventItemReader,它只是实现itemreader。

是否有一种方法来检查null或更好的方法来迭代StaxEventItemReader而不必指定元素的数量?

var sentinel = objectStaxEventItemReader.read();
while(sentinel != null) {
invokeRandomMethod(sentinel);
sentinel = objectStaxEventItemReader.read();
}

将返回值保存在一个变量中,并检查它是否为空。

相关内容

  • 没有找到相关文章

最新更新