program story

목록에서 전송하는 방법

inputbox 2020. 11. 26. 08:14
반응형

목록에서 전송하는 방법 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값을.


사용하면 이렇게 할 수 있습니다.

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

이것은 단순히 반복해서 CollectionDouble객체를 배열에 추가 하는 것보다 빠르지는 않지만 작성하는 데 훨씬 적습니다.


당신은 사용할 수 있습니다 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>();
  1. 먼저 다음을 사용하여 변환 List<Double>해야 Double[]합니다.

    Double[] array = frameList.toArray(new Double[frameList.size()]);
    
  2. 다음으로 다음 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

반응형