Obtenir la taille d’un itérable en Java

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'unIterable en Java.

2. Itérable et Itérateur

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

L'interfaceCollection étendIterable et donc toutes les classes enfants deCollection implémentent égalementIterable.

Iterable n'a qu'une seule méthode qui produit unhttps://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html:

public interface Iterable {
    public Iterator iterator();
}

CeIterator peut ensuite être utilisé pour itérer sur les éléments dans lesIterable.

3. Taille Iterable en utilisant Core Java

3.1. Bouclefor-each

Toutes les classes qui implémententIterable sont éligibles pour la bouclefor-each en Java.

Cela nous permet de boucler sur les éléments dans lesIterable 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, leIterable sera une instance deCollection,  comme unList ou unSet.

Dans de tels cas, nous pouvons vérifier le type duIterable et appeler la méthodesize() 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 unStream à partir desIterable.

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

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

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

4.1. IterableUtils#size()

La bibliothèqueApache Commons Collections a une belle classeIterableUtils qui fournit des méthodes utilitaires statiques pour les instancesIterable.

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


    org.apache.commons
    commons-collections4
    4.1

Nous pouvons invoquer la méthodesize() deIterableUtils sur un objetIterable pour obtenir sa taille.

return IterableUtils.size(data);

4.2. Iterables#size()

De même, la bibliothèqueGoogle Guava fournit également une collection de méthodes utilitaires statiques dans sa classeIterables pour fonctionner sur les instancesIterable.

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


    com.google.guava
    guava
    25.0

L'appel de la méthode statiquesize() sur la classeIterables nous donne le nombre d'éléments.

return Iterables.size(data);

Sous le capot,IterableUtils etIterables utilisent la combinaison d'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'unIterable en Java.

Le code source de cet article et les cas de test pertinents sont disponiblesover on GitHub.