将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 () ); } } ) );