2012-03-31 17 views
2

私は、次の操作を実行しようとしています:のJavaのtoArray()メソッド:プリミティブ結果型

RESが List<List<Double>>として宣言されて
double[][] ret = new double[res.size()][columnSize]; 
for(int i = 0; i < res.size(); i++){ 
    ret[i] = res.get(i).toArray(new double[columnSize]); 
} 

。これは、toArray()メソッドは、結果の型を推測するためにパラメータ化された配列を必要とし、プリミティブではないためです。

私のメソッドの戻り値の型はDouble[][]に変更できますが、さまざまなAPIから、double[][] 9プリミティブが必要です)。それは、アップキャスティングがたくさんあることを意味しますね。

解決策、アドバイスはありますか?

答えて

3

あなたはコレクションにプリミティブを維持することはできません、あなたは、このようにprimive型の配列にコレクションを変換する必要があります。

double[] toArray(Collection<Double> collection) { 
    double[] arr = new double[collection.size()]; 
    int i = 0; 
    for (Double d : collection) { 
     arr[i++] = d; 
    } 
    return arr; 
} 
+0

これは非常に簡単な解決策でした...しかし、いい意味ではありません:) – Bober02

+0

残念ながら、より良い解決法はありません。 –

+1

うわー、Java *がまだ配列の自動アンボクシングを持っていないことは信じられない。ところで、この回答は単一次元のものです。問題は2D配列のため、ネストされたforループが必要です。とてもシンプルな何かのためにクレイジー。 – Chloe

3

Guavaで:double[] Doubles.toArray(Collection<? extends Number)は、トリックを行います。

+1

うわー、これは本当に便利な仲間です!簡単に見てみると、Javaの間違いや実装の欠落を補うライブラリのように見えます。あなたはbtwについて知っているかもしれない何か類似ですか? – Bober02

+0

私はグアバで働いています。グアバが提供するすべてのものが好奇心なら、[wiki](http://code.google.com/p/guava-libraries/wiki/GuavaExplained?tm=6)から始めるのが最適です。 –

+0

うんいいですね。あなたはこれが利用可能な最も複雑なスイートだと思いますか? – Bober02

0

2次元配列の場合。

private static int[][] convertListArray(ArrayList<Integer[]> al) { 
    int[][] ret = new int[al.size()][]; 
    for (int i=0; i < al.size(); i++) { 
     Integer[] row = al.get(i); 
     ret[i] = new int[row.length]; 
     for (int j = 0; j < row.length; j++) { 
      ret[i][j] = row[j]; 
     } 
    } 
    return ret; 
} 
関連する問題