2014-08-29 2 views
2

먼저, 다음 위치에서 (전에는 다른 사람과 비교하여)이 질문을 받았음을 알고 싶습니다.하지만 답변을 성공하지 못했습니다. 이 :두배의 배열에서 두배의 목록을 만드는 방법

Create ArrayList from array

내가 뭘하려고하면 다음과 같다 :

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

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


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


audioData.setProperty("FFTMagnitudeList", FFTMagnitudeList); 

, 나는 오류

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

수동으로 프리미티브에서 래퍼 유형 (목록의 경우)으로 복사해야합니다. 자바 8 사용

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

:

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

이 배열 밖으로 DoubleStream (기본 유형 double 스트림)를 생성은 각각 doubleDouble에 (Double.valueOf()를 사용하여) 변환 매핑을 사용 결과적으로 Double의 스트림을 ArrayList으로 수집합니다.

관련 문제