如何遍历 StaxEventItemReader/itemreader?
How to iterate over StaxEventItemReader/itemreader?
目前我想访问 StaxEventItemReader 中的对象。这是通过使用 StaxEventItemReader.read() 完成的(xml-文件有 50 objects/items),这样我就可以对这些对象做一些事情。
问题是如何正确地迭代 StaxEventItemReader 的项目?
原来我是这样的:
while (objectStaxEventItemReader.read() != null) {
invokeRandomMethod(objectStaxEventItemReader.read());
}
问题在于 read()“读取一段输入数据并前进到下一个”(Doc)。
所以最后只处理了 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();
}
将您的 return 值保存在变量中并检查其是否为空。
目前我想访问 StaxEventItemReader 中的对象。这是通过使用 StaxEventItemReader.read() 完成的(xml-文件有 50 objects/items),这样我就可以对这些对象做一些事情。
问题是如何正确地迭代 StaxEventItemReader 的项目?
原来我是这样的:
while (objectStaxEventItemReader.read() != null) {
invokeRandomMethod(objectStaxEventItemReader.read());
}
问题在于 read()“读取一段输入数据并前进到下一个”(Doc)。 所以最后只处理了 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();
}
将您的 return 值保存在变量中并检查其是否为空。