可以使用空Iterator与Java中的另一个迭代器连接

时间:2018-01-25 07:24:58

标签: java iterator guava concat

我有一个API连接到DB并返回一个Iterator。我必须在循环中调用此API以获取多个输入的记录。我的要求是连接我正在使用com.google.common.collect.Iterators class。

的所有迭代器

我的代码段如下所示:

Iterator<Record> iterator = Iterators.emptyIterator();
for (QueryHolder<String> queryHolder : queries) {
    Iterators.concat(iterator, fetchAnotherRecordIterator(queryHolder));
}
return iterator;

但最后我得到了空迭代器。在调试时,我从fetchAnotherRecordIterator方法获取记录。

不知道我们是否可以将迭代器附加到空迭代器。

2 个答案:

答案 0 :(得分:4)

当您调用方法com.google.common.collect.Iterators时,

Iterator会返回新的concat。这意味着您必须使用新的迭代器更新引用:

Iterator<Record> iterator = Iterators.emptyIterator();
for (QueryHolder<String> queryHolder : queries) {
    iterator = Iterators.concat(iterator, fetchAnotherRecordIterator(queryHolder));
}
return iterator;

答案 1 :(得分:0)

或者,您可以将Iterators#concat(Iterator)重叠与Iterators#transform(Iterator, Function)(或Iterables中的相应函数)结合使用,以获得单行代码:

return Iterators.concat(Iterators.transform(queries, this::fetchAnotherRecordIterator));

(如果你不能使用Java 8方法引用,显然会变脏。)

相关问题