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)
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...-
Dans votre exemple, c'est parce que vous ne pouvez pas avoir une liste d'un type primitif. En d'autres termes, List<int>
n'est pas possible.
Vous pouvez cependant avoir une List<Integer>
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<Integer> 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
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.