2011-03-03 76 views
14

当我尝试了双阵列转换为双ArrayList中我得到了以下错误:转换双阵列到双ArrayList的

Exception in thread "main" java.lang.ClassCastException: [D cannot be cast to java.lang.Double

下面是我的代码。

double [] firstValueArray ; 

ArrayList <Double> firstValueList = new ArrayList (Arrays.asList(firstValueArray));

我与另一个列表相比较,这个名单和结果分配给另一双变量。

请让我知道这个错误的原因。

+5

'for(doule d:doubleArray)arrayList.add(d);' – bestsss

回答

24

唉,Arrays.asList(..)不适用于基元。阿帕奇公地郎

Double[] doubleArray = ArrayUtils.toObject(durationValueArray); 
List<Double> list = Arrays.asList(doubleArray); 
+0

非常感谢Bozho。它解决了这个问题。 – gishara

17

Guava的版本更短:

List<Double> list = Doubles.asList(doubleArray); 

参考:

注意:这是一种可变参数法。所有的可变参数方法都可以使用相同类型的数组来调用(但不是相应的盒装/非盒装类型!!)。这两个调用是等价的:

Doubles.asList(new double[]{1d,2d}); 
Doubles.asList(1d,2d); 

此外,番石榴的版本没有做一个完整的遍历,它的基本数组的实时列表视图,转换原语,只有当他们访问的对象。

+0

什么是可变参数法?以及这两个电话是如何相等的? – JAVA

+0

@sunny机制在这里描述:[Java教程:任意数量的参数](http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html#varargs)。关键短语是“这是一个手动创建数组的快捷方式” –

+0

似乎由'Doubles.asList(double ... backingArray)'返回的列表不允许任何更改,例如使用'添加'或'addAll'。更新了doc链接:https://google.github.io/guava/releases/19.0/api/docs/index.html?com/google /common/primitives/Doubles.html –

3

感谢bestsss的评论应该是答案:

ArrayList<Double> firstValueList = new ArrayList<Double>(); 
for(double d : firstValueArray) firstValueList.add(d); 
12

使用Java 8流API,这是如果需要返回一个ArrayList作为实现然后使用与

DoubleStream.of(doublesArray).boxed().collect(Collectors.toList()); 

实现

DoubleStream.of(doublesArray).boxed().collect(Collectors.toCollection(ArrayList::new)); 

这一行不需要任何附加库。