Je souhaiterai savoir s'il est possible d'initialiser une ArrayList ou une collection en generale, dès sa création?
Comme ici, pour un tableau ?
Merci d'avance pour votre aide.Code:int tab[] = {1, 2, 3, 4, 5, 6};
Version imprimable
Je souhaiterai savoir s'il est possible d'initialiser une ArrayList ou une collection en generale, dès sa création?
Comme ici, pour un tableau ?
Merci d'avance pour votre aide.Code:int tab[] = {1, 2, 3, 4, 5, 6};
Non ce n'est pas possible.
Mais il me semble qu'une proposition a été faite à ce sujet pour Java 7 (à confirmer).
Hop, un petit coup d'oeil à la javadoc d'ArrayList et on voit qu'un ArrayList ne peut être initalisé à la création qu'à partir d'une autre collection.
new ArrayList(myCollection);
Pour initialiser un ArrayList à partir d'un tableau, je fais comme ceci :
List myList = Arrays.asList(new String[]{"a","b","c"});
Pour construire une liste avec un seul élément, on peut utiliser :
List myList = Collections.singletonList("toto");
Merci, cris9 pour ta solution.:mouarf:
Dommage que l'on soit quand même obligé de créer un tableau.:?
Une initialisation des la création comme pour un tableau faciliterais la vie sur tout quand on a une dizaine de listes assez importantes et de taille variables.:aie:
Vivement java 7
Salut,
Attention car dans ces deux cas la List obtenue n'est pas modifiable...Citation:
Envoyé par cris9
Avec Java 5.0 tu peux utiliser l'ellipse pour te faire une méthode statique qui initialiserait la liste :
Exemple :Code:
1
2
3
4
5
6
7 public static <E> List<E> newArrayList(E...values) { List<E> list = new ArrayList<E>(values.length); for(E element : values) { list.add(element); } return list; }
Code:List<String> list = newArrayList("a", "b", "c", "d", "e");
Ou sinon encore plus générique :
Exemple :Code:
1
2
3
4
5
6 public static <E,C extends Collection<E>> C init(C c, E...values) { for(E element : values) { c.add(element); } return c; }
Code:List<String> list = init(new ArrayList<String>(), "a", "b", "c", "d", "e");
a++
Plusieurs solutions. La 3e est la meilleure dans le cas général.
Code:
1
2 List<String> list = new ArrayList<String>() {{add("ch1"); add("ch2"); }}; //-: complexe à lire et à écrire
Code:
1
2
3 List<String> list = new ArrayList<String>(Arrays.asList("ch1", "ch2")); //+: utilisation du varags //-: création de tableau inutile
La meilleure solution:
Code:
1
2
3 List<String> list = new ArrayList<String>(); Collections.addAll(list, "ch1", "ch2"); //+: très pratique le varargs (ellipse) pour mettre plusieurs arguments
A noter que si tu souhaites toujours garder le même nombre d'élements dans ta liste, tu peux faire:
Attention quand même, le Arrays.asList(T... elements) peut être ambigüe.Code:
1
2
3 List<String> list = Arrays.asList("ch1","ch2"); //+: interface pour manipuler un tableau //-: non resizable
Par exemple:
Cette instruction ne compile pas, car Arrays.asList va retourner une List<Integer> que tu essaies d'affecter à une List<Number>.Code:List<Number> list = Arrays.asList(5, 2, 3); //ne compile pas
Pour que ça marche:
Code:List<Number> list = Arrays.<Number>asList(5, 2, 3);
Cela existe déjà, Collections.addAll (j'ai découvert ça récemment grâce à Thinking In Java).Citation:
Envoyé par adiGuba
Oui... je n'ai pas trop l'habitude de l'utiliser...Citation:
Envoyé par ®om
Par contre ma méthode a un avantage : elle peut être utilisé en ligne (utile pour initialiser les attributs de classes ;))
a++
Comment ça "en ligne"?Citation:
Envoyé par adiGuba
EDIT: tu parles de newArrayList?
newArrayList() ou init() :Citation:
Envoyé par ®om
Mais bon c'est sûr qu'une gestion au niveau du langage serait plus approprié ;)Code:
1
2
3
4
5
6
7 public class MaClasse { private List<String> list = newArrayList("a", "b", "c", "d", "e"); private Set<String> set = init(new HashSet<String>(), "a", "b", "c", "d", "e"); }
a++
merci pour votre aide:mouarf1: