Ottenere la dimensione di un Iterable in Java

1. Panoramica

In questo rapido tutorial, impareremo i vari modi in cui possiamo ottenere la dimensione di un Iterable in Java.

2. Iterabile e Iteratore

Iterable è una delle principali interfacce delle classi di raccolta in Java.

L' interfaccia Collection estende Iterable e quindi tutte le classi figlie di Collection implementano anche Iterable .

Iterable ha un solo metodo che produce un Iterator :

public interface Iterable { public Iterator iterator(); }

Questo Iteratore può quindi essere utilizzato per iterare sugli elementi in Iterable .

3. Dimensione iterabile utilizzando Core Java

3.1. per ogni ciclo

Tutte le classi che implementano Iterable sono idonee per il ciclo for-each in Java.

Questo ci consente di scorrere gli elementi in Iterable mentre si incrementa un contatore per ottenere la sua dimensione:

int counter = 0; for (Object i : data) { counter++; } return counter;

3.2. Collection.size ()

Nella maggior parte dei casi, l' Iterable sarà un'istanza di Collection, come un List o un Set .

In questi casi, possiamo controllare il tipo di Iterable e chiamare il metodo size () su di esso per ottenere il numero di elementi.

if (data instanceof Collection) { return ((Collection) data).size(); }

La chiamata a size () è generalmente molto più veloce dell'iterazione dell'intera raccolta.

Ecco un esempio che mostra la combinazione delle due soluzioni precedenti:

public static int size(Iterable data) { if (data instanceof Collection) { return ((Collection) data).size(); } int counter = 0; for (Object i : data) { counter++; } return counter; }

3.3. Stream.count ()

Se stiamo usando Java 8, possiamo creare un flusso da Iterable.

L'oggetto stream può quindi essere utilizzato per ottenere il conteggio degli elementi in Iterable .

return StreamSupport.stream(data.spliterator(), false).count();

4. Dimensione iterabile utilizzando librerie di terze parti

4.1. IterableUtils # size ()

La libreria Apache Commons Collections ha una bella classe IterableUtils che fornisce metodi di utilità statici per istanze Iterable .

Prima di iniziare, dobbiamo importare le ultime dipendenze da Maven Central:

     org.apache.commons     commons-collections4     4.1 

Possiamo invocare il metodo size () di IterableUtils su un oggetto Iterable per ottenere la sua dimensione.

return IterableUtils.size(data);

4.2. Iterables # size ()

Allo stesso modo, la libreria Google Guava fornisce anche una raccolta di metodi di utilità statici nella sua classe Iterables per operare su istanze Iterable .

Prima di iniziare, dobbiamo importare le ultime dipendenze da Maven Central:

     com.google.guava     guava     25.0 

Invocare il metodo statico size () sulla classe Iterables ci fornisce il numero di elementi.

return Iterables.size(data);

Dietro le quinte, sia IterableUtils che Iterables utilizzano la combinazione di approcci descritti in 3.1 e 3.2 per determinare la dimensione.

5. conclusione

In questo articolo, abbiamo esaminato diversi modi per ottenere le dimensioni di un Iterable in Java.

Il codice sorgente di questo articolo e i casi di test pertinenti sono disponibili su GitHub.