Comment et où utiliser les itérateurs

Comment utiliser les itérateurs

Itérateur de cellules

Il existe diverses façons d’accéder à l’itérateur de cellules, et l’on peut utiliser l’une de ces méthodes en fonction des besoins de l’application. Voici les méthodes qui retournent l’itérateur de cellules.

  1. Cells.iterator
  2. Row.iterator
  3. Range.iterator

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 démontre la mise en œuvre de la classe Iterator pour une collection de cellules.

Itérateur de lignes

L’itérateur de lignes peut être accédé tout en utilisant la méthode RowCollection.iterator. L’exemple de code suivant démontre la mise en œuvre de l’itérateur pour la classe RowCollection.

Itérateur de colonnes

L’itérateur de colonnes peut être accédé tout en utilisant la méthode ColumnCollection.iterator. L’exemple de code suivant démontre la mise en œuvre de l’itérateur pour la classe ColumnCollection.

Où utiliser les itérateurs

Pour discuter des avantages de l’utilisation des itérateurs, prenons un exemple concret.

Scénario

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

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

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

  1. Les API telles que MaxRow, MaxDataRow, MaxColumn, MaxDataColumn & MaxDisplayRange nécessitent du temps supplémentaire pour recueillir les statistiques correspondantes. Dans le cas où la matrice de données (ligne x colonnes) est grande, utiliser ces API pourrait entraîner une pénalité en termes de performances.
  2. Dans la plupart des cas, toutes les cellules dans une plage donnée ne sont pas instanciées. Dans de telles situations, vérifier chaque cellule dans la matrice n’est pas aussi efficace que de vérifier uniquement les cellules initialisées.
  3. Accéder à une cellule dans une boucle comme Cells.get(rowIndex, columnIndex) va provoquer l’instanciation de tous les objets de cellules dans une plage, ce qui pourrait éventuellement provoquer OutOfMemoryError.
Conclusion

Sur la base des faits mentionnés ci-dessus, voici les scénarios possibles où les itérateurs devraient être utilisés.

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