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は4com.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メソッド参照を使用できない場合は汚れます。)