web-dev-qa-db-de.com

Konvertieren Sie ein doppeltes Array in Double ArrayList

Wenn ich versuche, ein Double-Array in eine Double-Array-Liste zu konvertieren, wird folgende Fehlermeldung angezeigt:

Ausnahme im Thread "main" Java.lang.ClassCastException: [D kann nicht in Java.lang.Double umgewandelt werden

Unten ist mein Code.

double [] firstValueArray ;

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

Ich vergleiche diese Liste mit einer anderen Liste und ordne das Ergebnis einer anderen doppelten Variablen zu.

Bitte teilen Sie mir den Grund für diesen Fehler mit.

16
gishara

Leider funktioniert Arrays.asList(..) nicht mit Primitiven. Apache commons-lang hat

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

Guave s Version ist noch kürzer:

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

Referenz:

Hinweis: Dies ist eine Varargs-Methode. Alle varargs-Methoden können mit einem Array desselben Typs aufgerufen werden (jedoch nicht mit dem entsprechenden Boxed/Unboxed-Typ !!). Diese beiden Aufrufe sind äquivalent:

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

Außerdem führt die Guava-Version keine vollständige Überquerung durch, sondern eine Live-Listenansicht des primitiven Arrays, bei der nur dann Primitive in Objekte konvertiert werden, wenn auf sie zugegriffen wird.

20

Mit der Java 8 Streams API wird dies erreicht

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

Wenn eine ArrayList als Implementierung zurückgegeben werden soll, verwenden Sie

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

Dieser Einzeiler benötigt keine zusätzlichen Bibliotheken.

15
SpaceTrucker

Dank an bestsss für den Kommentar, der die Antwort sein sollte:

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

… Oder mit 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>() );
      }
    } ) );
0
Kaplan