¿Cuál es una manera simple y rápida de obtener un iterador que devuelve como máximo N elementos desde el inicio de un List
?Limite a ListIterator a los primeros N elementos (optimizado)
Las versiones más simples que pudiera surgir con son:
# 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();
}
Desafortunadamente ambas versiones crear un temporal List
que afecta significativamente el rendimiento como Estoy llamando a este método millones de veces en un círculo cerrado.
¿Hay alguna otra función de biblioteca que pueda usar para esto?
Nota: No puedo evitar la iteración en la lista como yo estoy pasando a un método que toma un iterador como su argumento y no puedo modificar esa clase.
Además de 'Iterators', tenga en cuenta que [' Iterables' también tiene 'limit()' method] (http: //docs.guava- libraries.googlecode.com/git/javadoc/com/google/common/collect/Iterables.html#limit(java.lang.Iterable,%20int)). Entonces, si tiene una 'Lista', es más simple hacer' Iterables.limit (aList, 3) '. – Jonik