Sarà sempre necessario iterare. Eppure è possibile utilizzare Java 8, 9 per fare il conteggio senza loop esplicitamente:
Iterable<Integer> newIterable =() -> iter;
long count = StreamSupport.stream(newIterable.spliterator(), false).count();
Ecco un test:
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);
}
Questo stampa:
5
Abbastanza interessante è possibile parallelizzare l'operazione di conteggio qui cambiando il flag parallel
in questa chiamata:
long count = StreamSupport.stream(newIterable.spliterator(), *true*).count();
fonte
2018-01-11 18:52:50
Un iteratore non corrisponde necessariamente a qualcosa con un "conteggio" ... –
Gli iteratori sono quello che sono; per iterare al prossimo oggetto di una collezione (può essere qualcosa come set, array, ecc.) Perché hanno bisogno di dire la dimensione quando non si cura di quello che stanno cercando di ripetere? 'per fornire un metodo di accesso indipendente dall'implementazione, in cui l'utente non ha bisogno di sapere se l'implementazione sottostante è una qualche forma di array o di elenco collegato e consente all'utente di passare attraverso la raccolta senza indicizzazione esplicita. http://penguin.ewu.edu/~trolfe/LinkedSort/Iterator.html – ecle