首先,我想说我知道之前曾在以下地点(其中包括)询问过这个问题,但我在答案中没有取得任何成功:
我要做的是以下内容:
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?
答案 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
。