Какой простой и быстрый способ получить итератор, который возвращает не более 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
, которая значительно влияет на производительность, так как я вызываю этот метод миллионы раз в узком цикле.
Есть ли другие библиотечные функции, которые я мог бы использовать для этого?
Примечание: я не могу избежать перебора списка, так как передаю его методу, который принимает итератор в качестве аргумента, и я не могу изменить этот класс.