9

我有一个ArrayList被调用out的,我需要将它转换为一个double[]。我在网上找到的例子说明了两件事:

第一次尝试:

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[]).

我在 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

谢谢!

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 回答