Cómo y dónde usar iteradores

Cómo usar iteradores

Cells iterador

Hay varias formas de acceder al iterador de celdas, y uno puede usar cualquiera de estos métodos según los requisitos de la aplicación. Estos son los métodos que devuelven el iterador de las celdas.

  1. Cells.iterator
  2. Fila.iterador
  3. Rango.iterador

Todos los métodos mencionados anteriormente devuelven el iterador que permite recorrer la colección de celdas que se han inicializado.

El siguiente ejemplo de código demuestra la implementación de la clase Iterator para una colección de celdas.

Iterador de filas

Se puede acceder al iterador de filas mientras se usa el método RowCollection.iterator. El siguiente ejemplo de código muestra la implementación de la clase Iterator for RowCollection.

Iterador de columnas

Se puede acceder al iterador de columnas mientras se usa el método ColumnCollection.iterator. El siguiente ejemplo de código muestra la implementación de la clase Iterator for ColumnCollection.

Dónde usar iteradores

Para discutir las ventajas de usar iteradores, tomemos un ejemplo en tiempo real.

Guión

Un requisito de la aplicación es recorrer todas las celdas de una hoja de trabajo determinada para leer sus valores. Podría haber varias formas de implementar este objetivo. Algunos se muestran a continuación.

Uso del rango de visualización
Uso de MaxDataRow y MaxDataColumn

Como puede observar, los dos enfoques mencionados anteriormente utilizan una lógica más o menos similar, es decir; recorra todas las celdas de la colección para leer los valores de las celdas. Esto podría ser problemático por varias razones, como se analiza a continuación.

  1. Las API como MaxRow, MaxDataRow, MaxColumn, MaxDataColumn y MaxDisplayRange requieren más tiempo para recopilar las estadísticas correspondientes. En caso de que la matriz de datos (filas x columnas) sea grande, el uso de estas API podría penalizar el rendimiento.
  2. En la mayoría de los casos, no se instancian todas las celdas en un rango dado. En tales situaciones, verificar cada celda de la matriz no es tan eficiente en comparación con verificar solo las celdas inicializadas.
  3. Acceder a una celda en un bucle como Cells.get(rowIndex, columnIndex) hará que se creen instancias de todos los objetos de celda en un rango, lo que eventualmente puede causar OutOfMemoryError.
Conclusión

Con base en los hechos mencionados anteriormente, a continuación se muestran los posibles escenarios en los que se deben usar los iteradores.

  1. Se requiere acceso de solo lectura de la colección de celdas, es decir; El requisito es solo inspeccionar las celdas.
  2. Se va a atravesar un gran número de celdas.
  3. Solo se deben recorrer las celdas/filas/columnas inicializadas.