gishara
gishara

Reputation: 845

Convert a double array to Double ArrayList

When I try to convert a double array to a Double arrayList I got the following error:

Exception in thread "main" java.lang.ClassCastException: [D cannot be cast to java.lang.Double

Below is my code.

double [] firstValueArray ;

ArrayList <Double> firstValueList = new ArrayList (Arrays.asList(firstValueArray));

I am comparing this list with another list and assign the result to another double variable.

Please let me know the reason for this error.

Upvotes: 25

Views: 51568

Answers (5)

SpaceTrucker
SpaceTrucker

Reputation: 13546

Using Java 8 Streams API this is achieved with

DoubleStream.of(doublesArray).boxed().collect(Collectors.toList());

Since java 16 this became a bit more concise:

DoubleStream.of(doublesArray).boxed().toList();

If returning an ArrayList as an implementation is required then use

DoubleStream.of(doublesArray).boxed().collect(Collectors.toCollection(ArrayList::new));

This one-liner doesn't require any additional libraries.

Upvotes: 37

Kaplan
Kaplan

Reputation: 11

…or with Java 1.7:

double[] firstValueArray = new double[] {1.0, 2.0, 3.0};

ArrayList<Double> list = DoubleStream.of( firstValueArray ).boxed().collect(
    Collectors.toCollection( new Supplier<ArrayList<Double>>() {
      public ArrayList<Double> get() {
        return( new ArrayList<Double>() );
      }
    } ) );

Upvotes: 1

matt2000
matt2000

Reputation: 1073

Credit to bestsss for the comment which should be the answer:

ArrayList<Double> firstValueList = new ArrayList<Double>();
for(double d : firstValueArray) firstValueList.add(d);

Upvotes: 5

Sean Patrick Floyd
Sean Patrick Floyd

Reputation: 298818

Guava's version is even shorter:

List<Double> list = Doubles.asList(doubleArray);

Reference:

Note: This is a varargs method. All varargs methods can be called using an array of the same type (but not of the corresponding boxed / unboxed type!!). These two calls are equivalent:

Doubles.asList(new double[]{1d,2d});
Doubles.asList(1d,2d);

Also, the Guava version doesn't do a full traverse, it's a live List view of the primitive array, converting primitives to Objects only when they are accessed.

Upvotes: 23

Bozho
Bozho

Reputation: 597016

Alas, Arrays.asList(..) doesn't work with primitives. Apache commons-lang has

Double[] doubleArray = ArrayUtils.toObject(durationValueArray);
List<Double> list = Arrays.asList(doubleArray);

Upvotes: 41

Related Questions