Wie und wo man Iteratoren verwendet

Verwendung von Iteratoren

Cells Iterator

Es gibt verschiedene Möglichkeiten, auf den Iterator der Zellen zuzugreifen, und je nach Anwendungsanforderungen kann jede dieser Methoden verwendet werden. Hier sind die Methoden, die den Iterator der Zellen zurückgeben.

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

Alle oben genannten Methoden geben den Iterator zurück, der es ermöglicht, die Sammlung von Zellen, die initialisiert wurden, zu durchlaufen.

Das folgende Codebeispiel veranschaulicht die Implementierung der Iterator-Klasse für eine Cells-Auflistung.

Zeilen-Iterator

Auf den Rows-Iterator kann zugegriffen werden, während die RowCollection.iterator-Methode verwendet wird. Das folgende Codebeispiel veranschaulicht die Implementierung der Iterator for RowCollection-Klasse.

Spalten-Iterator

Auf den Columns-Iterator kann mit der ColumnCollection.iterator-Methode zugegriffen werden. Das folgende Codebeispiel veranschaulicht die Implementierung der Iterator for ColumnCollection-Klasse.

Wo man Iteratoren verwendet

Um die Vorteile der Verwendung von Iteratoren zu erörtern, nehmen wir ein Echtzeitbeispiel.

Szenario

Eine Anwendungsanforderung besteht darin, alle Zellen in einem bestimmten Arbeitsblatt zu durchlaufen, um ihre Werte zu lesen. Es könnte mehrere Möglichkeiten geben, dieses Ziel umzusetzen. Einige werden unten demonstriert.

Anzeigebereich verwenden
Verwenden von MaxDataRow & MaxDataColumn

Wie Sie feststellen können, verwenden beide oben genannten Ansätze eine mehr oder weniger ähnliche Logik, das heißt; Schleife über alle Zellen in der Sammlung, um die Zellenwerte zu lesen. Dies könnte aus einer Reihe von Gründen problematisch sein, wie unten diskutiert wird.

  1. Die APIs wie MaxRow, MaxDataRow, MaxColumn, MaxDataColumn und MaxDisplayRange benötigen zusätzliche Zeit, um die entsprechenden Statistiken zu sammeln. Falls die Datenmatrix (Zeilen x Spalten) groß ist, kann die Verwendung dieser APIs zu Leistungseinbußen führen.
  2. In den meisten Fällen werden nicht alle Zellen in einem bestimmten Bereich instanziiert. In solchen Situationen ist es nicht so effizient, jede Zelle in der Matrix zu prüfen, als nur die initialisierten Zellen zu prüfen.
  3. Der Zugriff auf eine Zelle in einer Schleife als Cells.get(rowIndex, columnIndex) bewirkt, dass alle Zellobjekte in einem Bereich instanziiert werden, was schließlich zu OutOfMemoryError führen kann.
Fazit

Basierend auf den oben genannten Fakten sind im Folgenden die möglichen Szenarien aufgeführt, in denen Iteratoren verwendet werden sollten.

  1. Nur-Lese-Zugriff auf die Zellsammlung ist erforderlich, das heißt; Voraussetzung ist, dass nur die Zellen inspiziert werden.
  2. Eine große Anzahl von Zellen muss durchquert werden.
  3. Es sollen nur initialisierte Zellen/Zeilen/Spalten durchlaufen werden.