我有一个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
方法获取记录。
不知道我们是否可以将迭代器附加到空迭代器。
答案 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方法引用,显然会变脏。)