Siempre tendrá que repetir. Sin embargo, se puede usar Java 8, 9 para hacer el recuento y sin bucle explícitamente:
Iterable<Integer> newIterable =() -> iter;
long count = StreamSupport.stream(newIterable.spliterator(), false).count();
Aquí está una prueba:
public static void main(String[] args) throws IOException {
Iterator<Integer> iter = Arrays.asList(1, 2, 3, 4, 5).iterator();
Iterable<Integer> newIterable =() -> iter;
long count = StreamSupport.stream(newIterable.spliterator(), false).count();
System.out.println(count);
}
Esta impresora:
5
lo suficientemente interesantes que se pueden paralelizar la operación de recuento aquí cambiando el indicador parallel
en esta llamada:
long count = StreamSupport.stream(newIterable.spliterator(), *true*).count();
Un iterador no corresponde necesariamente a algo con un "recuento" ... –
Iteradores son lo que son; para iterar al siguiente objeto de una colección (puede ser cualquier cosa como conjunto, matriz, etc.) ¿Por qué necesitan decir el tamaño cuando no les importa para qué están tratando de iterar? 'proporcionar un método de acceso independiente de la implementación, en el cual el usuario no necesita saber si la implementación subyacente es alguna forma de matriz o de lista enlazada, y permite al usuario examinar la colección sin una indexación explícita. http://penguin.ewu.edu/~trolfe/LinkedSort/Iterator.html – ecle