2011-03-03 123 views
14

當我嘗試了雙陣列轉換爲雙ArrayList中我得到了以下錯誤:轉換雙陣列到雙ArrayList的

Exception in thread "main" java.lang.ClassCastException: [D cannot be cast to java.lang.Double

下面是我的代碼。

double [] firstValueArray ; 

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

我與另一個列表相比較,這個名單和結果分配給另一雙變量。

請讓我知道這個錯誤的原因。

+5

'for(doule d:doubleArray)arrayList.add(d);' – bestsss

回答

24

唉,Arrays.asList(..)不適用於基元。阿帕奇公地郎

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

非常感謝Bozho。它解決了這個問題。 – gishara

17

Guava的版本更短:

List<Double> list = Doubles.asList(doubleArray); 

參考:

注意:這是一種可變參數法。所有的可變參數方法都可以使用相同類型的數組來調用(但不是相應的盒裝/非盒裝類型!!)。這兩個調用是等價的:

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

此外,番石榴的版本沒有做一個完整的遍歷,它的基本數組的實時列表視圖,轉換原語,只有當他們訪問的對象。

+0

什麼是可變參數法?以及這兩個電話是如何相等的? – JAVA

+0

@sunny機制在這裏描述:[Java教程:任意數量的參數](http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html#varargs)。關鍵短語是「這是一個手動創建數組的快捷方式」 –

+0

似乎由'Doubles.asList(double ... backingArray)'返回的列表不允許任何更改,例如使用'添加'或'addAll'。更新了doc鏈接:https://google.github.io/guava/releases/19.0/api/docs/index.html?com/google /common/primitives/Doubles.html –

3

感謝bestsss的評論應該是答案:

ArrayList<Double> firstValueList = new ArrayList<Double>(); 
for(double d : firstValueArray) firstValueList.add(d); 
12

使用Java 8流API,這是如果需要返回一個ArrayList作爲實現然後使用與

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

實現

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

這一行不需要任何附加庫。