9

という があり、ArrayListそれoutを に変換する必要がありdouble[]ます。私がオンラインで見つけた例は、次の 2 つのことを示しています。

初挑戦:

double[] d = new double[out.size()];
out.toArray(d);

ただし、これによりエラーが発生します (Eclipse):

The method toArray(T[]) in the type List<Double> is not applicable for the arguments (double[]).

私が見つけた2番目の解決策はStackOverflowで、次のとおりでした。

double[] dx = Arrays.copyOf(out.toArray(), out.toArray().length, double[].class);

ただし、これによりエラーが発生します。

The method copyOf(U[], int, Class<? extends T[]>) in the type Arrays is not applicable for the arguments (Object[], int, Class<double[]>)

outこれらのエラーの原因と、これらの問題を発生させずに変換するにはどうすればよいdouble[]ですか? out実際、 double 値のみを保持します。

ありがとう!

4

3 に答える 3

12

ArrayList含まれているDoubleオブジェクトをプリミティブに変換しようとしていると思いますdouble[]

public static double[] convertDoubles(List<Double> doubles)
{
    double[] ret = new double[doubles.size()];
    Iterator<Double> iterator = doubles.iterator();
    int i = 0;
    while(iterator.hasNext())
    {
        ret[i] = iterator.next();
        i++;
    }
    return ret;
}

または、Apache CommonsにArrayUtilsは、メソッドを持つクラスがあります。toPrimitive()

 ArrayUtils.toPrimitive(out.toArray(new Double[out.size()]));

しかし、外部ライブラリを使用する代わりに、上記のように自分でこれを行うのは非常に簡単だと思います。

于 2013-01-03T07:17:10.167 に答える
2

やってみました

Double[] d = new Double[out.size()];
out.toArray(d);

Doubleつまり、プリミティブ型ではなくクラスを使用しますdouble

エラー メッセージは、これが問題であることを暗示しているようです。結局のところ、Doubleプリミティブ型のラッパー クラスであるため、double本質的に異なる型であり、コンパイラはそれをそのように扱います。

于 2013-01-03T07:15:01.283 に答える
1

ジェネリックはプリミティブ型では機能しないため、エラーが発生します。Double arrayの代わりに使用しprimitive doubleます。これを試して -

Double[] d = new Double[out.size()];
out.toArray(d);
double[] d1 = ArrayUtils.toPrimitive(d);
于 2013-01-03T07:18:27.773 に答える