Convertir un tableau en liste en Java

Comment convertir un tableau en liste en Java ?

J'ai utilisé Arrays.asList() mais le comportement (et la signature) a en quelque sorte changé de Java SE [1.4.2][1] (docs maintenant dans l'archive) à [8][2] et la plupart des snippets que j'ai trouvé sur le web utilisent le comportement de 1.4.2.

Par exemple :

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • sur 1.4.2 renvoie une liste contenant les éléments 1, 2, 3
  • sur 1.5.0+ renvoie une liste contenant le tableau spam

Dans la plupart des cas, il devrait être facile à détecter, mais parfois il peut passer inaperçu :

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);

[1] : http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-142docs-2045554.html [2] : https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#asList-T...-

Solution

Dans votre exemple, c'est parce que vous ne pouvez pas avoir une liste d'un type primitif. En d'autres termes, List n'est pas possible.

Vous pouvez cependant avoir une List en utilisant la classe [Integer][1] qui englobe la primitive int. Convertissez votre tableau en une [List][2] avec la méthode utilitaire Arrays.asList.

Integer[] spam = new Integer[] { 1, 2, 3 };
List list = Arrays.asList(spam);

Voir ce [code exécuté en direct sur IdeOne.com][3].

[1] : https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Integer.html [2] : https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/List.html [3] : https://ideone.com/KVd5j4

Commentaires (16)

Le problème est que les varargs ont été introduits dans Java5 et malheureusement, Arrays.asList() a été surchargé avec une version vararg également. Ainsi, Arrays.asList(spam) est compris par le compilateur Java5 comme un paramètre vararg de tableaux int.

Ce problème est expliqué plus en détail dans Effective Java 2ème édition, chapitre 7, point 42.

Commentaires (2)

vous devez couler dans le tableau

Arrays.asList((Object[]) array)
Commentaires (2)