【问题标题】:Error converting from ArrayList to double[]?从 ArrayList 转换为 double[] 时出错?
【发布时间】:2012-12-17 13:21:36
【问题描述】:

我有一个名为outArrayList,我需要将其转换为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 确实只包含双精度值。

谢谢!

【问题讨论】:

  • 你如何定义out?必须是 double[] 还是 Double[] 才可以接受?
  • 呃...投反对票,为什么?进行了研究,尝试了多种方法,但我仍然有一个问题。
  • @Emrakul 我没有投赞成票或反对票,但 SSCCE 会让这个问题在 IMO 变得更好。

标签: java arrays eclipse list arraylist


【解决方案1】:

我认为您正在尝试将包含 Double 对象的 ArrayList 转换为原始 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()]));

但我觉得如上所示,自己做这件事很容易,而不是使用外部库。

【讨论】:

  • 也适用于for(int i = 0; i &lt; ret.length; i++) ret[i] = out.get(i).doubleValue();,不需要迭代器。谢谢!
  • 这行不通。 i=i++ 导致 i 始终为 0,简单地说 i++;此外,不需要显式拆箱 (.doubleValue())。
  • 合并了建议的更改。谢谢
【解决方案2】:

你试过了吗

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

即使用类Double而不是原始类型double

错误消息似乎暗示这是问题所在。毕竟,由于Double 是原始类型double 的包装类,它本质上是一个不同的类型,编译器会这样对待它。

【讨论】:

  • @Telthien 在这种情况下,您能否将列表重新定义为 List&lt;double&gt;
  • @Telthien 或者您可以使用链接中所示的ArrayUtilsDouble[] 转换为double[]
【解决方案3】:

泛型不适用于原始类型,这就是您收到错误的原因。使用Double array 而不是primitive double。试试这个 -

Double[] d = new Double[out.size()];
out.toArray(d);
double[] d1 = ArrayUtils.toPrimitive(d);

【讨论】:

  • ArrayUtils 的包是什么
猜你喜欢
  • 1970-01-01
  • 2016-10-10
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
相关资源
最近更新 更多