将double数组转换为Double ArrayList

时间:2011-03-03 09:32:53

标签: java arrays collections arraylist

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

  

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

以下是我的代码。

double [] firstValueArray ;

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

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

请告诉我此错误的原因。

5 个答案:

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