2012-03-16 6 views
6

Uno dei più chiari vantaggi di codifica delle moderne collezioni è la possibilità di utilizzare la costruzione for-each. Ho sotto un semplice metodo di stampa generale delle tabelle, seguito da un metodo di caricamento di prova. Mentre questo funziona, un po 'per ciascuno sarebbe molto più pulito. Qualche idea?C'è un modo per usare una costruzione for-each per una tabella Guava?

public void printTable(Table table) 
{ 
    int numRows = table.rowKeySet().size(); 
    int numCols = table.columnKeySet().size(); 

    for (int i=0; i<numRows; i++) 
    { 
      for (int j=0; j<numCols; j++) 
      { 
       System.out.print(table.get(i,j) + " "); 
      } 
      System.out.println(); 
    } 
}   
Table<Integer, Integer, Integer> table = HashBasedTable.create(); 
void makeTable() 
{ 
    for (int i=0; i<4; i++) 
      for (int j=0; j<6; j++) 
       table.put(i, j, i*j+2); 
} 
+0

I cicli foreach funzionano solo con gli array e le cose che implementano 'Iterable'. Il 'Tavolo' di Guava non è nessuno di questi, quindi sei bloccato con il tuo ciclo indicizzato. – skaffman

+0

Ah! Questo ha senso, ma è un po 'deludente. Grazie! – MantaMan

+1

La suddetta costruzione e simili usando le chiavi di riga e di colonna mi hanno costretto a controllare le voci nulle in una tabella complessa in cui le cose sono state aggiunte e rimosse. Il seguente approccio funziona molto meglio: Collection coral = table.values ​​(); per (corallo corallo: coralli) {System.out.println (corallo); } – MantaMan

risposta

5

Perché non basta chiamare Map<R,Map<C,V>> rowMap() e scorrere su di esso?

Inoltre, penso che si potrebbe preferire uno TreeBasedTable che conta per l'ordine di righe e colonne, dal momento che si utilizzano numeri interi per le righe e le colonne e sembra che si desideri eseguire l'iterazione sull'ordine naturale di tali elementi.

+0

Grazie! Proverò l'approccio della mappa. Questo è un esempio di prova per costruzioni che userò con oggetti (coralli) in un sistema di modellazione di barriera corallina. Ogni riga è una specie di corallo. Mescolerò gli oggetti all'interno delle file prima di attraversarli, e quindi non dopo un ordinamento naturale. – MantaMan

+2

Sì, questo è il modo preferito per farlo. Scorri i 'entrySet()' s di 'Map's. –

+0

Grazie! Sì, lo sto facendo con semplici HashMaps e proverò sul tavolo. – MantaMan

Problemi correlati