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 个方法引用,显然会变脏。)
我有一个连接到数据库的 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 个方法引用,显然会变脏。)