web-dev-qa-db-fra.com

Convertir un double tableau en Double ArrayList

Lorsque j'essaye de convertir un tableau double en tableau double, j'ai l'erreur suivante:

Exception dans le fil "principal" Java.lang.ClassCastException: [D ne peut pas être converti en Java.lang.Double.

Ci-dessous mon code.

double [] firstValueArray ;

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

Je compare cette liste avec une autre liste et assigne le résultat à une autre variable double.

S'il vous plaît laissez-moi savoir la raison de cette erreur.

16
gishara

Hélas, Arrays.asList(..) ne fonctionne pas avec les primitives. Apache commons-lang a

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

La version de Guava est encore plus courte:

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

Référence:

Remarque: Ceci est une méthode varargs. Toutes les méthodes varargs peuvent être appelées en utilisant un tableau du même type (mais pas du type boxed/unboxed correspondant !!). Ces deux appels sont équivalents:

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

En outre, la version de Guava n'effectue pas un parcours complet, il s'agit d'une vue en direct de la liste du tableau primitif, convertissant les primitives en objets uniquement lors de leur accès.

20

L’utilisation de l’API Java 8 Streams est réalisée avec

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

Si vous devez renvoyer ArrayList comme implémentation, utilisez

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

Ce one-liner ne nécessite aucune bibliothèque supplémentaire.

15
SpaceTrucker

Nous remercions le commentaire qui devrait être la réponse:

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

… Ou avec 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