我有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
确实只包含双倍值。
谢谢!
答案 0 :(得分: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()]));
但我觉得如上所示自己做这件事很容易,而不是使用外部库。
答案 1 :(得分:2)
你试过吗
Double[] d = new Double[out.size()];
out.toArray(d);
即使用类Double
而不是基本类型double
错误消息似乎暗示这是问题所在。毕竟,由于Double
是基本类型double
的包装类,它本质上是一个不同的类型,编译器会将其视为不同类型。
答案 2 :(得分:1)
泛型不适用于原始类型,这就是您收到错误的原因。使用Double array
代替primitive double
。试试这个 -
Double[] d = new Double[out.size()];
out.toArray(d);
double[] d1 = ArrayUtils.toPrimitive(d);