108 votes

Obtenir la taille d'un Iterable en Java

J'ai besoin de calculer le nombre d'éléments d'un fichier Iterable en Java. Je sais que je peux le faire :

Iterable values = ...
it = values.iterator();
while (it.hasNext()) {
  it.next();
  sum++;
}

Je pourrais également faire quelque chose comme ceci, car je n'ai plus besoin des objets de l'Iterable :

it = values.iterator();
while (it.hasNext()) {
  it.remove();
  sum++;
}

Un benchmark à petite échelle n'a pas montré une grande différence de performance, des commentaires ou d'autres idées pour ce problème ?

4voto

New Bee Points 138

Java 8 et plus

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

2voto

aioobe Points 158466

Je choisirais it.next() pour la simple raison que next() est garantie d'être mise en œuvre, tandis que remove() est une opération facultative.

E next()

Renvoie l'élément suivant dans l'itération.

void remove()

Supprime de la collection sous-jacente le dernier élément renvoyé par l'itérateur. (opération facultative) .

0voto

Mark Bramnik Points 4472

En ce qui me concerne, ce ne sont que des méthodes différentes. La première laisse l'objet sur lequel vous itérez inchangé, tandis que la seconde le laisse vide. La question est de savoir ce que vous voulez faire. La complexité de la suppression est basée sur l'implémentation de votre objet itérable. Si vous utilisez des collections, obtenez simplement la taille comme l'a proposé le Kazekage Gaara - c'est généralement la meilleure approche en termes de performances.

-2voto

Kazekage Gaara Points 7978

Pourquoi n'utilisez-vous pas simplement le size() sur votre Collection pour obtenir le nombre d'éléments ?

Iterator est juste destiné à itérer, rien d'autre.

-4voto

fatimasajjad Points 507

Au lieu d'utiliser des boucles et de compter chaque élément ou d'utiliser une bibliothèque tierce, nous pouvons simplement convertir l'itérable en ArrayList et obtenir sa taille.

((ArrayList) iterable).size();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X