Come e dove utilizzare gli iteratori

Come utilizzare gli iteratori

Iteratore celle

Ci sono vari modi per accedere all’iteratore delle celle, e si può utilizzare uno qualsiasi di questi metodi in base alle esigenze dell’applicazione. Ecco i metodi che restituiscono l’iteratore delle celle.

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

Tutti i metodi sopra menzionati restituiscono l’iteratore che consente di attraversare la collezione di celle che sono state inizializzate.

L’esempio di codice seguente dimostra l’implementazione della classe Iterator per una collezione di celle.

Iteratore delle righe

L’Iteratore delle righe può essere accessibile utilizzando il metodo RowCollection.iterator. L’esempio di codice seguente dimostra l’implementazione dell’Iterator per la classe RowCollection.

Iteratore delle colonne

L’Iteratore delle colonne può essere accessibile utilizzando il metodo ColumnCollection.iterator. L’esempio di codice seguente dimostra l’implementazione dell’Iteratore per la classe ColumnCollection.

Dove utilizzare gli iteratori

Per discutere i vantaggi dell’utilizzo degli iteratori, prendiamo un esempio in tempo reale.

Scenario

Un requisito dell’applicazione è attraversare tutte le celle in un dato Foglio di lavoro per leggere i loro valori. Potrebbero esserci diversi modi per implementare questo obiettivo. Ne vengono dimostrati alcuni di seguito.

Utilizzo della gamma di visualizzazione
Utilizzo di MaxDataRow e MaxDataColumn

Come puoi osservare, entrambi i suddetti approcci utilizzano più o meno la stessa logica, cioè; iterare su tutte le celle nella collezione per leggere i valori delle celle. Questo potrebbe essere problematico per diversi motivi come discusso di seguito.

  1. Le API come MaxRow, MaxDataRow, MaxColumn, MaxDataColumn e MaxDisplayRange richiedono tempo aggiuntivo per raccogliere le statistiche corrispondenti. Nel caso la matrice dei dati (righe x colonne) sia ampia, utilizzare queste API potrebbe infliggere una penalità sulle prestazioni.
  2. Nella maggior parte dei casi, non tutte le celle in un dato intervallo sono istanziate. In tali situazioni controllare ogni cella nella matrice non è così efficiente rispetto al controllo solo delle celle inizializzate.
  3. L’accesso a una cella in un ciclo come Cells.get(rowIndex, columnIndex) causerà l’istanziazione di tutti gli oggetti cella in un intervallo, il che potrebbe alla fine causare OutOfMemoryError.
Conclusioni

Sulla base dei fatti sopra menzionati, di seguito sono riportati i possibili scenari in cui dovrebbero essere utilizzati gli iteratori.

  1. È richiesto l’accesso in sola lettura della raccolta di celle, cioè; il requisito è solo ispezionare le celle.
  2. È necessario attraversare un grande numero di celle.
  3. Devono essere attraversate solo celle/righe/colonne inizializzate.