Obtenir la taille d'un itérable en Java

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons découvrir les différentes façons dont nous pouvons obtenir la taille d'un Iterable en Java.

2. Iterable et Iterator

Iterable est l'une des principales interfaces des classes de collection en Java.

L' interface Collection étend Iterable et, par conséquent, toutes les classes enfants de Collection implémentent également Iterable .

Iterable n'a qu'une seule méthode qui produit un Iterator :

public interface Iterable { public Iterator iterator(); }

Cet itérateur peut ensuite être utilisé pour itérer sur les éléments de l' itérable .

3. Taille itérable avec Core Java

3.1. pour chaque boucle

Toutes les classes qui implémentent Iterable sont éligibles pour la boucle for-each en Java.

Cela nous permet de boucler sur les éléments de l' Iterable tout en incrémentant un compteur pour obtenir sa taille:

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

3.2. Collection.size ()

Dans la plupart des cas, Iterable sera une instance de Collection, telle qu'une liste ou un ensemble .

Dans de tels cas, nous pouvons vérifier le type de la méthode Iterable et appeler la méthode size () dessus pour obtenir le nombre d'éléments.

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

L'appel à size () est généralement beaucoup plus rapide que l'itération dans toute la collection.

Voici un exemple montrant la combinaison des deux solutions ci-dessus:

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 ()

Si nous utilisons Java 8, nous pouvons créer un Stream à partir de Iterable.

L'objet stream peut ensuite être utilisé pour obtenir le nombre d'éléments dans Iterable .

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

4. Taille itérable à l'aide de bibliothèques tierces

4.1. IterableUtils # taille ()

La bibliothèque Apache Commons Collections a une belle classe IterableUtils qui fournit des méthodes utilitaires statiques pour les instances Iterable .

Avant de commencer, nous devons importer les dernières dépendances de Maven Central:

     org.apache.commons     commons-collections4     4.1 

Nous pouvons invoquer la méthode size () de IterableUtils sur un objet Iterable pour obtenir sa taille.

return IterableUtils.size(data);

4.2. Iterables # taille ()

De même, la bibliothèque Google Guava fournit également une collection de méthodes utilitaires statiques dans sa classe Iterables pour fonctionner sur des instances Iterable .

Avant de commencer, nous devons importer les dernières dépendances de Maven Central:

     com.google.guava     guava     25.0 

L'appel de la méthode static size () sur la classe Iterables nous donne le nombre d'éléments.

return Iterables.size(data);

Sous le capot, IterableUtils et Iterables utilisent la combinaison des approches décrites en 3.1 et 3.2 pour déterminer la taille.

5. Conclusion

Dans cet article, nous avons examiné différentes manières d'obtenir la taille d'un Iterable en Java.

Le code source de cet article et les cas de test pertinents sont disponibles à l'adresse over sur GitHub.