/ /空のイテレータを使用してJavaの別のイテレータと連結できますか?-java、iterator、guava、concat

空のイテレータをJavaの別のイテレータと連結するために使用できますか? - java、iterator、guava、concat

DBに接続してIteratorを返すAPIがあります。複数の入力のレコードを取得するには、このAPIをループで呼び出す必要があります。私の要件は、使用しているすべてのイテレーターを連結することです com.google.common.collect.Iterators クラス。

私のコードスニペットを以下に示します。

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

しかし、最後に空のイテレータを取得しています。デバッグ時に、レコードを取得しています fetchAnotherRecordIterator 方法。

イテレータを空のイテレータに追加できるかどうかわからない。

回答:

回答№1は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;

回答№2の場合は0

また、 Iterators#concat(Iterator) オーバーロードとの組み合わせ Iterators#transform(Iterator, Function) (または対応する関数 Iterables)ワンライナーの場合:

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

(明らかに、Java 8メソッド参照を使用できない場合は汚れます。)