2012-03-16 18 views
6

Jedną z najczystszych zalet kodowania współczesnych kolekcji jest możliwość korzystania z każdej konstrukcji. Mam poniżej prostą, ogólną metodę drukowania tabeli, po której następuje metoda ładowania testowego. Podczas gdy to działa, jakiś rodzaj dla każdego byłby o wiele czystszy. Jakieś pomysły?Czy istnieje sposób użycia konstrukcji dla każdego stołu Guawy?

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

pętle foreach działają tylko z tablicami i elementami implementującymi 'Iterable'. "Tabela" Guavy nie należy do tych, więc utknąłeś w indeksowanej pętli for. – skaffman

+0

Ah! To ma sens, ale jest trochę rozczarowujące. Dzięki! – MantaMan

+1

Powyższa konstrukcja i podobne, używając klawiszy wiersza i kolumny, zmusiły mnie do sprawdzenia zerowych wpisów w złożonej tabeli, w której zostały dodane i usunięte. Poniższe podejście działa znacznie lepiej: Collection coral = table.values ​​(); dla (Coral coral: corals) {System.out.println (coral); } – MantaMan

Odpowiedz

5

Dlaczego nie można po prostu zadzwonić Map<R,Map<C,V>> rowMap() i iteracyjne nad nim?

Również, myślę, że wolisz TreeBasedTable, który uwzględnia kolejność wierszy i kolumn, ponieważ używasz liczb całkowitych dla wierszy i kolumn i wydaje się, że chcesz iterować na ich naturalną kolejność.

+0

Dzięki! Wypróbuję podejście Map. To jest przykład testowy dla konstrukcji, których użyję z obiektami (koralami) w systemie modelowania rafy. Każdy rząd to gatunek koralowca. Będę tasować obiekty w rzędach, zanim przejdę przez nie, a więc nie po naturalnej kolejności. – MantaMan

+2

Tak, jest to preferowany sposób na zrobienie tego. Iteruj po 'entrySet()' s '' Map's. –

+0

Dzięki! Tak, robiłem to z prostymi HashMaps i spróbuję na stole. – MantaMan

Powiązane problemy