Co to jest prosty i szybki sposób na uzyskanie iteratora, który zwraca co najwyżej N elementów od początku List
?Ogranicza ListIterator do pierwszych elementów N (zoptymalizowanych)
Najprostsze wersje mogłem wymyślić to:
# 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();
}
Niestety obie wersje utworzyć tymczasowy List
co znacząco wpływa na wydajność, jak Nazywam tę metodę miliony razy w ciasnej pętli.
Czy są jakieś inne funkcje biblioteczne, które mogę użyć do tego?
Uwaga: Nie mogę uniknąć iteracji po liście jak ja przekazaniem go do metody, która bierze iterator jako argument i nie mogę modyfikować tej klasy.
Oprócz "Iterators", należy pamiętać, że ['Iterables' również ma' limit() 'metodę] (http: //docs.guava- libraries.googlecode.com/git/javadoc/com/google/common/collect/Iterables.html#limit(java.lang.Iterable,%20int)). Więc jeśli masz 'List', to najprościej zrobić' Iterables.limit (aList, 3) '. – Jonik