将double数组转换为Double ArrayList

当我尝试将双数组转换为Double arrayList时,我收到以下错误:

线程“main”中的exceptionjava.lang.ClassCastException:[D不能强制转换为java.lang.Double

以下是我的代码。

double [] firstValueArray ; 

ArrayList firstValueList = new ArrayList (Arrays.asList(firstValueArray));

我将此列表与另一个列表进行比较,并将结果分配给另一个双变量。

请让我知道此错误的原因。

唉, Arrays.asList(..)不适用于基元。 Apache commons-lang有

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

番石榴的版本更短:

 List list = Doubles.asList(doubleArray); 

参考:

  • Doubles.asList(double ...)

注意:这是一种varargs方法。 可以使用相同类型的数组调用所有varargs方法(但不能使用相应的boxed / unboxed类型!!)。 这两个电话是等价的:

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

此外,Guava版本不执行完整遍历,它是原始数组的实时List视图,仅在访问它们时将原语转换为Objects。

使用Java 8 Streams API可以实现

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

如果需要返回ArrayList作为实现,则使用

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

这种单行程不需要任何额外的库。

感谢评论的最佳人选应该是答案:

 ArrayList firstValueList = new ArrayList(); for(double d : firstValueArray) firstValueList.add(d); 

…或Java 1.7:

 double[] firstValueArray = new double[] {1.0, 2.0, 3.0}; ArrayList list = DoubleStream.of( firstValueArray ).boxed().collect( Collectors.toCollection( new Supplier>() { public ArrayList get() { return( new ArrayList() ); } } ) );