2013-04-22 113 views
4

這可能嗎?我一直在努力。我原本是先鑄造到Long [],然後轉換成double []這讓我編譯,但後來給了我一個鑄造錯誤。我現在卡住了。在java中將Object []轉換爲double []

在這段代碼中,我迭代了我的散列表中的條目。

Object[] v = null; 
for(Map.Entry<String,NumberHolder> entry : entries) 
{ 
     v = entry.getValue().singleValues.toArray(); //need to get this into double [] 
} 

這裏是我numberHolder類

private static class NumberHolder 
{ 
    public int occurrences = 0; 
    public ArrayList<Long> singleValues = new ArrayList<Long>(); 
} 
+1

爲什麼v需要是一個對象數組? – 2013-04-22 13:59:59

+1

我會讓singleValues成爲一個'TDoubleArrayList',它允許你調用toArray()來返回一個'double []'注意:由於double不是'''',所以'double []'不是'Object []'對象' – 2013-04-22 14:03:17

+0

@BenGreen它不,我只是要採取這一點,並試圖讓它加倍[] – user2007843 2013-04-22 14:06:03

回答

7

非通用toArray可能不是最優的,我建議你使用for循環,而不是:

Long[] v = new Long[entry.getValue().singleValues.size()]; 
int i = 0; 
for(Long v : entry.getValue().singleValues) { 
    v[i++] = v; 
} 

現在你有陣列的Long對象而不是Object。但是,Long是一個整數值而不是浮點數。你應該可以施放,但它聞起來像是一個潛在的問題。

您還可以對直接轉換而是採用了Long陣列:

double[] v = new double[entry.getValue().singleValues.size()]; 
int i = 0; 
for(Long v : entry.getValue().singleValues) { 
    v[i++] = v.doubleValue(); 
} 

理念:你不能嘗試轉換陣列這裏,而是轉換每個元素和存儲結果在新陣列

+1

或者只是'v.doubleValue()',因爲Long instanceof Number。 – yshavit 2013-04-22 14:06:16

+0

@yshavit整潔,謝謝。編輯。 – 2013-04-22 14:08:22

2

爲了Object[]類型的數組「轉換」 double[]你需要創建一個新的double[]double類型,你會從輸入數組鑄造每個Object單獨進去,大概的值來填充它一個循環。

0

這聽起來有點像一些不好的做法。
首先,我不鼓勵你使用數組,使用Map或List。

如果您需要的值加倍,使吸氣劑

private List<Long> myList; 
//initialize somewhere 

double getElementAsDouble(int index){ 
    return myList.get(index).doubleValue(); 
} 

,並添加一個轉換器像getMyListAsDoubleArray(),您進行轉換,如果你真的要使用數組。你可以在這裏查看答案,例如Matthias Meid's。

+0

我不得不使用數組,因爲我正在製作一個圖形,並且'dataset.addSeries'方法只接受'double []' – user2007843 2013-04-22 14:16:50

+0

@ user2007843我看到,我仍然建議製作一個轉換器,而不是在本地執行該作業。 – CsBalazsHungary 2013-04-22 14:17:38

相關問題