2012-03-16 24 views
6

Uno de los beneficios de codificación más limpios de las Colecciones modernas es la capacidad de usar la construcción para cada uno. Tengo debajo un método de impresión de tabla general simple, seguido de un método de carga de prueba. Mientras esto funcione, algún tipo de para cada uno sería mucho más limpio. ¿Algunas ideas?¿Hay alguna manera de usar una construcción para cada una para una tabla de guayaba?

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

foreach loops solo funcionan con arreglos y cosas que implementan 'Iterable'. La 'Tabla' de Guava no es ninguna de esas, por lo que estás atascado con tu ciclo indexado. – skaffman

+0

¡Ah! Eso tiene sentido, pero es un poco decepcionante. ¡Gracias! – MantaMan

+1

La construcción anterior, y otras similares con claves de fila y columna me obligaron a buscar entradas nulas en una tabla compleja en la que las cosas se agregaban y eliminaban. El siguiente enfoque funciona mucho mejor: Colección coral = table.values ​​(); para (Coral coral: corales) {System.out.println (coral); } – MantaMan

Respuesta

5

¿Por qué no llamas a Map<R,Map<C,V>> rowMap() y iterar sobre ella?

Además, creo que podría preferir un TreeBasedTable que represente el orden de filas y columnas, ya que está utilizando números enteros para las filas y columnas y parece que desea repetir el orden natural de las mismas.

+0

¡Gracias! Voy a probar el enfoque de Mapa. Este es un ejemplo de prueba para construcciones que usaré con objetos (corales) en un sistema de modelado de arrecife. Cada fila es una especie de coral. Estaré barajando los objetos dentro de las filas antes de pasar a través de ellos, y realmente no después de un orden natural. – MantaMan

+2

Sí, esta es la forma preferida de hacerlo. Iteramos sobre 'entrySet()' s de 'Map's. –

+0

¡Gracias! Sí, he estado haciendo eso con HashMaps simples, y probaré sobre la mesa. – MantaMan

Cuestiones relacionadas