2012-03-16 12 views
6

Modern Koleksiyonların en temiz kodlama yararlarından biri, her bir yapı için kullanım yeteneğidir. Basit bir genel tablo baskı yönteminin altında bir test yükleme yöntemi var. Bu çalışırken, her biri için bir çeşit daha temiz olurdu. Herhangi bir fikir?Guava Tablosu için her bir inşaat için bir yol var mı?

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 döngüleri, yalnızca "Iterable" işlevini uygulayan diziler ve dizilerle çalışır. Guava'nın 'Tablosu' bunlardan biri değil, bu yüzden dizininiz için dizininizde kalıyorsunuz. – skaffman

+0

Ah! Bu mantıklı, ama biraz hayal kırıklığı yaratıyor. Teşekkürler! – MantaMan

+1

Yukarıdaki yapı ve benzerleri, satır ve sütun tuşlarını kullanarak, null girdilerin, eklendiği ve kaldırıldığı karmaşık bir tabloda kontrol etmem için beni zorladı. Aşağıdaki yaklaşım daha iyi çalışır: Koleksiyon coral = table.values ​​(); (Mercan mercan: mercanlar) için {System.out.println (mercan); } – MantaMan

cevap

5

Neden sadece Map<R,Map<C,V>> rowMap() arayıp üzerinde yineleme yok?

Ayrıca, satırlar ve sütunlar için tamsayılar kullandığınızdan ve bunların doğal düzenini yinelemek istediğinizden, satır ve sütun sırasını hesaplayan bir TreeBasedTable tercih edebilirsiniz.

+0

Teşekkürler! Harita yaklaşımını deneyeceğim. Bu bir resif modelleme sisteminde nesnelerle (mercanlar) kullanacağım konstrüksiyonlar için bir test örneğidir. Her sıra bir mercan türüdür. Satırlar içine girmeden önce sıraları karıştırıp, doğal bir siparişten sonra değil. – MantaMan

+2

Evet, bunu yapmanın tercih edilen yolu budur. Map's'in 'entrySet()' i üzerinde yineleyin. –

+0

Teşekkürler! Evet, basit HashMaps ile bunu yapıyorum ve masanın üzerinde deneyecekler. – MantaMan

İlgili konular