How do I convert Double[] to double[]?

后端 未结 8 1726
没有蜡笔的小新
没有蜡笔的小新 2020-11-28 09:04

I\'m implementing an interface that has functionality similar to a table that can contain an types of objects. The interface specifies the following function:



        
相关标签:
8条回答
  • 2020-11-28 09:26

    If you don't mind using a 3rd party library, commons-lang has the ArrayUtils type with various methods for manipulation.

    Double[] doubles;
    ...
    double[] d = ArrayUtils.toPrimitive(doubles);
    

    There is also the complementary method

    doubles = ArrayUtils.toObject(d);
    

    Edit: To answer the rest of the question. There will be some overhead to doing this, but unless the array is really big you shouldn't worry about it. Test it first to see if it is a problem before refactoring.

    Implementing the method you had actually asked about would give something like this.

    double[] getDoubles(int columnIndex) {
        return ArrayUtils.toPrimitive(data[columnIndex]);
    }
    
    0 讨论(0)
  • 2020-11-28 09:27

    You could use a for each loop to construct a temp array of the same size then cast each individual element to double and but it in the array.

    SO:

    double[] tempArray = new double[data[columnIndex].length];
    int i = 0;
    for(Double d : (Double) data[columnIndex]) {
      tempArray[i] = (double) d;
      i++;
    }
    

    Please correct me if I am dead wrong here.

    0 讨论(0)
  • 2020-11-28 09:29

    You can utilise the ArrayUtils to convert

    Double[] d; // initialise
    double[] array = ArrayUtils.toPrimitive(d);
    

    No need of looping the entire data.

    0 讨论(0)
  • 2020-11-28 09:31

    I would second the ArrayUtils answer and add that the 1.5 autoboxing documentation(via) kinda reveals that there is no builtin way:

    There is no permitted conversion from array type SC[] to array type TC[] if there is no permitted conversion other than a string conversion from SC to TC

    0 讨论(0)
  • 2020-11-28 09:36

    I don't have anything to add to the real question beyond what jjnguy and Eric Koslow said.

    But just a side note: You mention casting an Object array to a Double array. The following will NOT work:

    Object[] oa=new Object[3];
    oa[0]=new Double("1.0");
    oa[1]=new Double("2.0");
    oa[2]=new Double("3.0");
    Double[] da=(Double[])oa;
    

    The last line will throw a class cast exception. Even though every element in the array is indeed a Double, the array was created as an array of Objects, not an array of Doubles, so the cast is invalid.

    0 讨论(0)
  • 2020-11-28 09:40

    In Java 8, this is one-liner:

    Double[] boxed = new Double[] { 1.0, 2.0, 3.0 };
    double[] unboxed = Stream.of(boxed).mapToDouble(Double::doubleValue).toArray();
    

    Note that this still iterates over the original array and creates a new one.

    0 讨论(0)
提交回复
热议问题