목록에서 전송하는 방법 Java에서 double []로?
다음과 같은 변수가 있습니다.
List<Double> frameList = new ArrayList<Double>();
/* Double elements has added to frameList */
double[]고성능으로 Java에서 해당 변수 의 유형을 갖는 새 변수를 어떻게 가질 수 있습니까?
고성능-모든 Double개체가 단일 double값을 래핑 합니다. 이러한 모든 값을 double[]배열 에 저장 하려면 인스턴스 컬렉션을 반복 해야Double 합니다. O(1)매핑 할 수없는, 이것은 당신이 얻을 수있는 가장 빠른해야한다 :
double[] target = new double[doubles.size()];
for (int i = 0; i < target.length; i++) {
target[i] = doubles.get(i).doubleValue(); // java 1.4 style
// or:
target[i] = doubles.get(i); // java 1.5+ style (outboxing)
}
의견에 추가 질문에 감사드립니다;) 다음은 피팅 ArrayUtils#toPrimitive방법 의 소스 코드입니다 .
public static double[] toPrimitive(Double[] array) {
if (array == null) {
return null;
} else if (array.length == 0) {
return EMPTY_DOUBLE_ARRAY;
}
final double[] result = new double[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = array[i].doubleValue();
}
return result;
}
(그리고 저를 믿으십시오, 나는 첫 번째 대답에 사용하지 않았습니다-비록 ... 꽤 비슷해 보이지만 :-D)
이 (뒤에서)를 두 번 반복 처리하기 때문에 그런데, Marcelos 응답의 복잡도는 O는 (2N)는 다음을 만들기 위해 먼저 Double[]푸는 후, 목록에서 double값을.
java-8을 사용하면 이렇게 할 수 있습니다.
double[] arr = frameList.stream().mapToDouble(Double::doubleValue).toArray(); //via method reference
double[] arr = frameList.stream().mapToDouble(d -> d).toArray(); //identity function, Java unboxes automatically to get the double value
그것이하는 일은 :
- 를 얻을
Stream<Double>목록에서 - 각 이중 인스턴스를 원시 값에 매핑하여
DoubleStream toArray()배열을 얻으려면 호출 하십시오.
Guava 에는이를 수행하는 메서드가 있습니다. double [] Doubles.toArray (Collection <Double>)
이것은 단순히 반복해서 Collection각 Double객체를 배열에 추가 하는 것보다 빠르지는 않지만 작성하는 데 훨씬 적습니다.
당신은 사용할 수 있습니다 ArrayUtils를 얻기 위해 평민 - 랭에서 클래스 double[]A로부터 Double[].
Double[] ds = frameList.toArray(new Double[frameList.size()]);
...
double[] d = ArrayUtils.toPrimitive(ds);
Double[]를 호출 하여로 변환 할 수 있지만 변환 frameList.toArray(new Double[frameList.size()])하려면 목록 / 배열을 반복해야합니다.double[]
귀하의 질문에 따라
List<Double> frameList = new ArrayList<Double>();
먼저 다음을 사용하여 변환
List<Double>해야Double[]합니다.Double[] array = frameList.toArray(new Double[frameList.size()]);다음으로 다음
Double[]을double[]사용하여 변환 할 수 있습니다.double[] doubleArray = ArrayUtils.toPrimitive(array);
한 줄로 직접 사용할 수 있습니다.
double[] array = ArrayUtils.toPrimitive(frameList.toArray(new Double[frameList.size()]));
Eclipse 컬렉션의 기본 컬렉션을 사용 하고 권투를 아예 피할 수 있습니다.
DoubleList frameList = DoubleLists.mutable.empty();
double[] arr = frameList.toArray();
초기화 할 수 없거나 초기화하지 않으려면 DoubleList:
List<Double> frames = new ArrayList<>();
double[] arr = ListAdapter.adapt(frames).asLazy().collectDouble(each -> each).toArray();
참고 : 저는 Eclipse Collections의 기고자입니다.
참고 URL : https://stackoverflow.com/questions/6018267/how-to-cast-from-listdouble-to-double-in-java
'program story' 카테고리의 다른 글
| 고아 Docker 마운트 호스트 볼륨? (0) | 2020.11.26 |
|---|---|
| Swift : 내비게이션 컨트롤러가있는 prepareForSegue (0) | 2020.11.26 |
| 선택적 출력 매개 변수 (0) | 2020.11.25 |
| 클래스 Foo는 MyApp 및 MyAppTestCase 모두에서 구현됩니다. (0) | 2020.11.25 |
| .gitignore를 Repo에 추가하는 모범 사례 (0) | 2020.11.25 |