Come e dove usare gli iteratori

Come usare gli iteratori

Cells Iteratore

Esistono vari modi per accedere all’iteratore delle celle e si può utilizzare uno qualsiasi di questi metodi in base ai requisiti dell’applicazione. Ecco i metodi che restituiscono l’iteratore delle celle.

  1. Cells.iterator
  2. Riga.iteratore
  3. Intervallo.iteratore

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

Nell’esempio di codice seguente viene illustrata l’implementazione della classe Iterator per una raccolta di celle.

Iteratore di righe

È possibile accedere a Rows Iterator durante l’utilizzo del metodo RowCollection.iterator. Nell’esempio di codice seguente viene illustrata l’implementazione della classe Iterator per RowCollection.

Iteratore di colonne

È possibile accedere a Columns Iterator durante l’utilizzo del metodo ColumnCollection.iterator. Nell’esempio di codice seguente viene illustrata l’implementazione della classe Iterator per ColumnCollection.

Dove usare gli iteratori

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

Scenario

Un requisito dell’applicazione è attraversare tutte le celle in un determinato foglio di lavoro per leggerne i valori. Ci potrebbero essere diversi modi per implementare questo obiettivo. Alcuni sono dimostrati di seguito.

Utilizzo dell’intervallo di visualizzazione
Utilizzo di MaxDataRow e MaxDataColumn

Come puoi osservare, entrambi gli approcci sopra menzionati utilizzano una logica più o meno simile, ovvero; eseguire il ciclo su tutte le celle della raccolta per leggere i valori delle celle. Questo potrebbe essere problematico per una serie di motivi come discusso di seguito.

  1. Le API come MaxRow, MaxDataRow, MaxColumn, MaxDataColumn e MaxDisplayRange richiedono più tempo per raccogliere le statistiche corrispondenti. Nel caso in cui la matrice di dati (righe x colonne) sia grande, l’utilizzo di queste API potrebbe imporre una riduzione delle prestazioni.
  2. Nella maggior parte dei casi, non tutte le celle in un determinato intervallo vengono istanziate. In tali situazioni controllare ogni cella della matrice non è così efficiente rispetto a controllare solo le celle inizializzate.
  3. L’accesso a una cella in un ciclo come Cells.get(rowIndex, columnIndex) causerà la creazione di un’istanza di tutti gli oggetti cella in un intervallo, che alla fine potrebbe causare OutOfMemoryError.
Conclusione

Sulla base dei fatti sopra menzionati, di seguito sono riportati i possibili scenari in cui è necessario utilizzare gli iteratori.

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