2014-08-29 76 views
2

首先,我想說我知道這已被問到之前在以下位置(其他人),但我沒有任何成功的答案有:如何創建一個雙打數組中的雙打列表

Create ArrayList from array

我所試圖做的是以下幾點:

double[] FFTMagnitudeArray = processAudio.processFFT(audioData); 


List<Double> FFTMagnitudeList = Arrays.asList(FFTMagnitudeArray); 


audioData.setProperty("FFTMagnitudeList", FFTMagnitudeList); 

但是,我得到的錯誤:

"Type mismatch: cannot convert from List<double[]> to List<Double>" 

這對我來說沒有意義,因爲我認爲List是必要的,而Array.asList(double [])將返回Double列表,而不是double []。我也試過以下,無果:

List<Double> FFTMagnitudeList = new ArrayList<Double>(); 
FFTMagnitudeList.addAll(Arrays.asList(FFTMagnitudeArray)); 


List<Double> FFTMagnitudeList = new ArrayList<Double>(Arrays.asList(FFTMagnitudeArray)); 

而且我一直得到相同的錯誤。

那麼如何創建列表?

回答

5

更改您的方法以返回對象包裝數組類型。

Double[] FFTMagnitudeArray = processAudio.processFFT(audioData); 
List<Double> FFTMagnitudeList = Arrays.asList(FFTMagnitudeArray); 

或者您必須手動從原語複製到包裝類型(對於List)。

double[] FFTMagnitudeArray = processAudio.processFFT(audioData); 
List<Double> FFTMagnitudeList = new ArrayList<>(FFTMagnitudeArray.length); 
for (double val : FFTMagnitudeArray) { 
    FFTMagnitudeList.add(val); 
} 
5

double類型是原始類型而不是對象。 Arrays.asList需要一個對象數組。將double元素的數組傳遞給該方法時,由於數組被視爲對象,因此該方法會將該參數作爲double[]對象類型的數組讀取。

您可以將數組元素設置爲Double包裝類型。

Double[] FFTMagnitudeArray = processAudio.processFFT(audioData); 
1

使用Java 8:

List<Double> FFTMagnitudeList = Arrays.stream(FFTMagnitudeArray).mapToObj(Double::valueOf).collect(Collectors.toCollection(ArrayList::new)); 

這就產生了一個DoubleStream出數組的(一個基本類型double的流),使用其中將每個doubleDouble(使用Double.valueOf())的映射,然後將產生的Double的流收集到ArrayList中。