Hur och var man använder iteratorer

Hur man använder Iteratorer

Cells Iterator

Det finns olika sätt att komma åt cellernas iterator, och man kan använda vilken som helst av dessa metoder baserat på applikationskraven. Här är metoderna som returnerar cellernas iterator.

  1. Cells.iterator
  2. Rad.iterator
  3. Range.iterator

Alla de ovan nämnda metoderna returnerar iteratorn som gör det möjligt att passera samlingen av celler som har initierats.

Följande kodexempel visar implementeringen av Iterator-klassen för en cellsamling.

Rader Iterator

Rows Iterator kan nås när du använder metoden RowCollection.iterator. Följande kodexempel visar implementeringen av klassen Iterator for RowCollection.

Kolumner Iterator

Columns Iterator kan nås när du använder metoden ColumnCollection.iterator. Följande kodexempel visar implementeringen av klassen Iterator för ColumnCollection.

Var man använder Iteratorer

För att diskutera fördelarna med att använda iteratorer, låt oss ta ett exempel i realtid.

Scenario

Ett applikationskrav är att gå igenom alla celler i ett givet kalkylblad för att läsa deras värden. Det kan finnas flera sätt att genomföra detta mål. Några få visas nedan.

Använda visningsintervall
Använda MaxDataRow & MaxDataColumn

Som du kan observera att båda ovan nämnda tillvägagångssätt använder mer eller mindre liknande logik, det vill säga; loop över alla celler i samlingen för att läsa cellvärdena. Detta kan vara problematiskt av ett antal skäl som diskuteras nedan.

  1. API:erna som MaxRow, MaxDataRow, MaxColumn, MaxDataColumn & MaxDisplayRange kräver extra tid för att samla in motsvarande statistik. Om datamatrisen (rader x kolumner) är stor, kan användning av dessa API:er innebära prestationsstraff.
  2. I de flesta fall instansieras inte alla celler i ett givet intervall. I sådana situationer är det inte så effektivt att kontrollera varje cell i matrisen jämfört med att kontrollera endast de initialiserade cellerna.
  3. Att komma åt en cell i en loop som Cells.get(rowIndex, columnIndex) kommer att göra att alla cellobjekt i ett intervall instansieras, vilket så småningom kan orsaka OutOfMemoryError.
Slutsats

Baserat på ovan nämnda fakta, följer följande möjliga scenarier där iteratorer bör användas.

  1. Skrivskyddad åtkomst till cellsamlingen krävs, det vill säga; kravet är att endast inspektera cellerna.
  2. Ett stort antal celler ska passeras.
  3. Endast initierade celler/rader/kolumner ska korsas.