Comment et où utiliser les itérateurs

Comment utiliser les itérateurs

Cells Itérateur

Il existe différentes façons d’accéder à l’itérateur des cellules, et on peut utiliser n’importe laquelle de ces méthodes en fonction des exigences de l’application. Voici les méthodes qui renvoient l’itérateur des cellules.

  1. Cells.iterator
  2. Row.itérateur
  3. Range.itérateur

Toutes les méthodes mentionnées ci-dessus renvoient l’itérateur qui permet de parcourir la collection de cellules qui ont été initialisées.

L’exemple de code suivant illustre l’implémentation de la classe Iterator pour une collection de cellules.

Itérateur de lignes

L’itérateur de lignes est accessible lors de l’utilisation de la méthode RowCollection.iterator. L’exemple de code suivant illustre l’implémentation de la classe Iterator pour RowCollection.

Itérateur de colonnes

L’itérateur de colonnes est accessible lors de l’utilisation de la méthode ColumnCollection.iterator. L’exemple de code suivant illustre l’implémentation de la classe Iterator pour ColumnCollection.

Où utiliser les itérateurs

Afin de discuter des avantages de l’utilisation d’itérateurs, prenons un exemple en temps réel.

Scénario

Une exigence de l’application est de parcourir toutes les cellules d’une feuille de calcul donnée pour lire leurs valeurs. Il pourrait y avoir plusieurs façons de mettre en œuvre cet objectif. Quelques-uns sont illustrés ci-dessous.

Utilisation de la plage d’affichage
Utilisation de MaxDataRow et MaxDataColumn

Comme vous pouvez le constater, les deux approches mentionnées ci-dessus utilisent une logique plus ou moins similaire, c’est-à-dire ; boucle sur toutes les cellules de la collection pour lire les valeurs des cellules. Cela pourrait être problématique pour un certain nombre de raisons, comme indiqué ci-dessous.

  1. Les API telles que MaxRow, MaxDataRow, MaxColumn, MaxDataColumn & MaxDisplayRange nécessitent plus de temps pour rassembler les statistiques correspondantes. Dans le cas où la matrice de données (lignes x colonnes) est volumineuse, l’utilisation de ces API peut entraîner une baisse des performances.
  2. Dans la plupart des cas, toutes les cellules d’une plage donnée ne sont pas instanciées. Dans de telles situations, vérifier chaque cellule de la matrice n’est pas aussi efficace que de vérifier uniquement les cellules initialisées.
  3. L’accès à une cellule dans une boucle en tant que Cells.get(rowIndex, columnIndex) entraînera l’instanciation de tous les objets de cellule d’une plage, ce qui peut éventuellement provoquer une OutOfMemoryError.
Conclusion

Sur la base des faits mentionnés ci-dessus, voici les scénarios possibles dans lesquels les itérateurs doivent être utilisés.

  1. Un accès en lecture seule à la collection de cellules est requis, c’est-à-dire ; l’exigence est d’inspecter uniquement les cellules.
  2. Un grand nombre de cellules sont à traverser.
  3. Seules les cellules/lignes/colonnes initialisées doivent être parcourues.