当我尝试将double数组转换为Double arrayList时,我收到以下错误:
线程“main”中的异常java.lang.ClassCastException:[D无法强制转换为java.lang.Double
以下是我的代码。
double [] firstValueArray ;
ArrayList <Double> firstValueList = new ArrayList (Arrays.asList(firstValueArray));
我将此列表与另一个列表进行比较,并将结果分配给另一个双变量。
请告诉我此错误的原因。
答案 0 :(得分:32)
唉,Arrays.asList(..)
不能用于原语。 Apache commons-lang已经
Double[] doubleArray = ArrayUtils.toObject(durationValueArray);
List<Double> list = Arrays.asList(doubleArray);
答案 1 :(得分:20)
Guava的版本更短:
List<Double> list = Doubles.asList(doubleArray);
<强>参考:强>
注意:这是一种varargs方法。可以使用相同类型的数组(但不是相应的盒装/非盒装类型!!)调用所有varargs方法。这两个电话是等价的:
Doubles.asList(new double[]{1d,2d});
Doubles.asList(1d,2d);
此外,Guava版本不进行完整遍历,它是原始数组的实时List视图,只有在访问它们时才将原语转换为Objects。
答案 2 :(得分:16)
使用Java 8 Streams API可以通过
实现DoubleStream.of(doublesArray).boxed().collect(Collectors.toList());
如果需要返回ArrayList
作为实现,则使用
DoubleStream.of(doublesArray).boxed().collect(Collectors.toCollection(ArrayList::new));
这个单行并不需要任何额外的库。
答案 3 :(得分:3)
感谢评论的最佳人选,应该是答案:
ArrayList<Double> firstValueList = new ArrayList<Double>();
for(double d : firstValueArray) firstValueList.add(d);
答案 4 :(得分:0)
…或Java 1.7:
double[] firstValueArray = new double[] {1.0, 2.0, 3.0};
ArrayList<Double> list = DoubleStream.of( firstValueArray ).boxed().collect(
Collectors.toCollection( new Supplier<ArrayList<Double>>() {
public ArrayList<Double> get() {
return( new ArrayList<Double>() );
}
} ) );