2014-08-29 74 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中。