Existe-t-il un moyen "calculé" rapide d'obtenir le nombre d'un itérateur ?
int i = 0;
for ( ; some_iterator.hasNext() ; ++i ) some_iterator.next();
... semble être un gaspillage de cycles CPU.
Existe-t-il un moyen "calculé" rapide d'obtenir le nombre d'un itérateur ?
int i = 0;
for ( ; some_iterator.hasNext() ; ++i ) some_iterator.next();
... semble être un gaspillage de cycles CPU.
Utilisation de la bibliothèque Guava :
int size = Iterators.size(iterator);
En interne, il parcourt simplement tous les éléments, donc c'est juste pour plus de commodité.
Vous devrez toujours itérer. Pourtant, vous pouvez utiliser Java 8, 9 pour faire le comptage sans boucler explicitement :
Iterable<Integer> newIterable = () -> iter;
long count = StreamSupport.stream(newIterable.spliterator(), false).count();
Voici un essai :
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);
}
Cela imprime :
5
Assez intéressant, vous pouvez paralléliser l'opération de comptage ici en modifiant le parallel
sur cet appel :
long count = StreamSupport.stream(newIterable.spliterator(), *true*).count();
En utilisant la bibliothèque Guava , une autre option consiste à convertir le Iterable
en List
.
List list = Lists.newArrayList(some_iterator);
int count = list.size();
Utilisez ceci si vous devez également accéder aux éléments de l'itérateur après avoir obtenu sa taille. En utilisant Iterators.size()
vous ne pouvez plus accéder aux éléments itérés.
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.