簡體   English   中英

如何從雙精度數組中創建雙精度列表

[英]How to create a list of doubles out of an array of doubles

首先,我想說我知道之前曾在以下地點(其中包括)詢問過這個問題,但我的答案並沒有取得任何成功:

從數組創建ArrayList

我想要做的是以下內容:

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呢?

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

您可以讓數組元素設置Double包裝器類型。

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

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

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

使用Java 8:

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

這將從數組中創建DoubleStream (基本類型double的流),使用將每個double轉換為Double的映射(使用Double.valueOf() ),然后將生成的Double流收集到ArrayList

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM