2009-05-01 13 views
0

、配列、Javaのコレクションおよびその逆のにコレクションの
配列を変換するためにいくつかのエレガントな方法を提案してください。
のJava:コレクションのコレクションに配列の配列を変換し、その逆

Java APIには便利なメソッドはありません

public static <T> T[][] nestedCollectionsToNestedArrays(
    Collection<? extends Collection<T>> source){ 

    // ... ? 
} 

public static <T> Collection<Collection<T>> nestedArraysToNestedCollections(
    T[][] source){ 

    // ... ? 
} 

追加質問:
プリミティブ型のネストされた配列とは何ですか?

禁止タイプの は、ジェネリックアレイの作成のため、各プリミティブタイプのメソッドを宣言する必要がありますか?

public static <T> Collection<Collection<T>> 
     nestedArraysToNestedCollections(T[][] source) { 
    Collection<Collection<T>> ret = new ArrayList<Collection<T>>(); 
    for (int i = 0; i < source.length; i++) { 
     // could be ret.add(new ArrayList<T>(Arrays.asList(source[i])); 
     Collection<T> list = new ArrayList<T>(source[i].length); 
     for (int j = 0; j < source[i].length; j++) { 
      list.add(source[i][j]); 
     } 
    } 
    return ret; 
} 

他の方向はかなりトリッキーです:ここでは

答えて

1

コレクションの配列 - >配列の配列: "T"の型情報が存在しないため、オブジェクトの[] []を返します。必要に応じて手動でTのクラスを渡す必要があります配列右のタイプであるために、それはより複雑になります)

public static Object[][] nestedListsToNestedArrays(
    Collection<? extends Collection<?>> source){ 
    Object[][] result = new Object[source.size()][]; 
    int i = 0; 
    for (Collection<?> subCollection : source) { 
    result[i++] = subCollection.toArray(); 
    } 
    return result; 
} 

追加質問:プリミティブ型の ネストされた配列とは何ですか?私は

はい、あなたはそれぞれのプリミティブ型のためのメソッドを宣言、または反射犠牲型の安全性を使用することができますいずれかを、各 プリミティブ型のためのメソッドを宣言する必要が ください。その理由は、各プリミティブ配列の型は無関係であり、Object以外のすべてのプリミティブ型のスーパータイプは存在しないからです。

禁止された汎用アレイのため が作成されていますか?

いいえ、それが理由です。コレクションのコレクション - >配列の配列がT [] []を上回るのはなぜ難しいですか?

0

はarray->コレクションのための方法です。

+0

拡張forループで何が問題になっていますか? –

+0

何もありませんが、これがライブラリメソッドになるかどうかはわかりましたが、少し速い方法で行うこともできます。もちろん、強化されたforループは将来的にはより早く終了するかもしれないので、これは一種のものです。 –

関連する問題