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

Can an empty Iterator be used to concat with another iterator in Java

我有一个连接到数据库的 API 和一个迭代器 returns。我必须在循环中调用这个 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 方法获取记录。

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

当您调用方法 concat 时,

com.google.common.collect.Iterators 返回一个新的 Iterator。这意味着您必须使用新的迭代器更新引用:

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

或者,您可以使用 Iterators#concat(Iterator) overload combined with Iterators#transform(Iterator, Function) (or corresponding functions from Iterables) 作为 one-liner:

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

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