2012-03-16 6 views
6

現代のコレクションの最もクリーンなコーディングの利点の1つは、それぞれの構成を使用する能力です。私は以下の簡単な一般的なテーブル印刷方法と、それに続くテスト読み込み方法を持っています。これは動作しますが、何らかのfor-eachは多くのクリーナーになります。何か案は?グアバテーブルにfor-eachコンストラクションを使用する方法はありますか?

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ループは 'Iterable'を実装している配列やものでしか動作しません。 Guavaの 'Table'はそれらのどちらでもないので、あなたはあなたのインデックス付きforループに悩まされています。 – skaffman

+0

ああ!それは理にかなっていますが、少し残念です。ありがとう! – MantaMan

+1

上記の構造と、行と列のキーを使用した同様の構造では、物事が追加されたり削除されたりした複雑なテーブルのnullエントリをチェックする必要がありました。次のアプローチははるかに優れています:Collection coral = table.values(); for(Coral coral:サンゴ){System.out.println(サンゴ); } – MantaMan

答えて

5

なぜMap<R,Map<C,V>> rowMap()に電話して、それを反復してみませんか?

また、行と列に整数を使用しているため、それらの自然順序を反復したいと思うので、TreeBasedTableを使用することをお勧めします。

+0

ありがとう!私は地図のアプローチを試してみます。これは、サンゴ礁のモデリングシステムでオブジェクト(サンゴ)とともに使用する構造のテスト例です。各列はサンゴ種です。私はそれらのステップを進める前に行内のオブジェクトをシャッフルしているので、自然順序付け後ではありません。 – MantaMan

+2

これは、これを行うのが好ましい方法です。 'Map'sの' entrySet() 'を反復処理します。 –

+0

ありがとう!はい、私は単純なHashMapsでこれをやっています。それをテーブルで試してみましょう。 – MantaMan

関連する問題