2011-06-27 6 views
1

テーブルのデータ構造となるコレクションのコレクションがあるとしましょう。Javaのコレクションのコレクションを翻訳する

Collection<Collection<T>> table; 

Javaを使用して「行」を「列」に変換するのに最も効率的な方法はどれですか?

EDIT:

val_11 val_12 val_13 val_14 
val_21 val_22 val_23 val_24 
val_31 val_32 val_33 val_34 

should be translated to 

val_11 val_21 val_31 
val_12 val_22 val_32 
val_13 val_23 val_33 
val_14 val_24 val_34 
+0

はすべて同じサイズのコレクションですか?または最大サイズがありますか? – sfussenegger

+0

ああ、一般的にあなたの質問に少し詳しく説明しようとする。質問が良ければ良いほど答えは良くなる。 – sfussenegger

+0

はい、コレクションは同じサイズであると見なすことができます。最大サイズはありません。 – jilt3d

答えて

1

コレクションのコレクションが行列を表していることを前提とトランスポーズ方法:

public List<List<T>> transpose(Collection<Collection<T>> table) { 
    boolean init = false; 

    List<List<T>> result = new ArrayList<List<T>>(); 
    for (Collection<T> row: table) { 
     if (!init) { 
      for(int i = 0; i < row.size(); i++) 
       result.add(new ArrayList<T>(table.size()); 
      init = true; 
     } 

     for(int i = 0; i < row.size(); i++) 
      result.get(i).add(row.get(i)); 
    } 

    return result; 
} 
0

あなたはGuavaTableではなくCollection<Collection<T>>を使用した場合、あなたは」 Tables.transposeを使用して、行キーと列キーを切り替えて表のビューを作成することができます。もちろん、行や列のキー(おそらく整数)を扱う必要はありません。