a の先頭から最大で N 個の要素を返すイテレータを取得する簡単で高速な方法は何List
ですか?
私が思いつくことができる最も単純なバージョンは次のとおりです。
#1:
import com.google.common.collect.Iterators;
// ...
public static <E> Iterator<E> lengthLimitedIterator(Iterable<E> source, int maxLen) {
return Iterators.partition(source.iterator(), maxLen).next().iterator();
}
#2:
public static <E> Iterator<E> lengthLimitedIterator(List<E> source, int maxLen) {
return source.subList(0, Math.min(source.size(), maxLen)).iterator();
}
残念ながら、どちらのバージョンもList
パフォーマンスに大きな影響を与える一時的なものを作成します。これは、このメソッドをタイトなループで何百万回も呼び出しているためです。
これに使用できる他のライブラリ関数はありますか?
注:イテレータを引数として取るメソッドにリストを渡しているため、リストを反復処理することは避けられず、そのクラスを変更することはできません。