将double数组转换为Double ArrayList

gis*_*ara 18 java arrays collections arraylist

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

线程"main"中的异常java.lang.ClassCastException:[D无法强制转换为java.lang.Double

以下是我的代码.

double [] firstValueArray ;
Run Code Online (Sandbox Code Playgroud)

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

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

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

Boz*_*zho 36

唉,Arrays.asList(..)不适用于原语.Apache commons-lang有

Double[] doubleArray = ArrayUtils.toObject(durationValueArray);
List<Double> list = Arrays.asList(doubleArray);
Run Code Online (Sandbox Code Playgroud)


Spa*_*ker 21

使用Java 8 Streams API可以实现

DoubleStream.of(doublesArray).boxed().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如果需要返回一个ArrayList实现,那么请使用

DoubleStream.of(doublesArray).boxed().collect(Collectors.toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)

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


Sea*_*oyd 20

番石榴的版本更短:

List<Double> list = Doubles.asList(doubleArray);
Run Code Online (Sandbox Code Playgroud)

参考:

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

Doubles.asList(new double[]{1d,2d});
Doubles.asList(1d,2d);
Run Code Online (Sandbox Code Playgroud)

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


mat*_*000 5

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

ArrayList<Double> firstValueList = new ArrayList<Double>();
for(double d : firstValueArray) firstValueList.add(d);
Run Code Online (Sandbox Code Playgroud)