如何从双精度数组中创建双精度列表

时间:2014-08-29 21:31:54

标签: java arrays list double

首先,我想说我知道之前曾在以下地点(其中包括)询问过这个问题,但我在答案中没有取得任何成功:

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));

我一直得到同样的错误。

那我该如何创建List?

3 个答案:

答案 0 :(得分:5)

double类型是基本类型而不是对象。 Arrays.asList期望一组对象。将double元素数组传递给方法时,由于数组被视为对象,因此该方法会将参数作为double[]对象类型的数组读取。

您可以将数组元素设置为Double包装类型。

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

答案 1 :(得分: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);
}

答案 2 :(得分:1)

使用Java 8:

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

这将从数组中创建DoubleStream(基本类型double的流),使用将每个double转换为Double的映射(使用{{ 1}}),然后将生成的Double.valueOf()流收集到Double