IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[DEBUTANT] Peut-on initialiser une ArrayListe dés sa création?


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut [DEBUTANT] Peut-on initialiser une ArrayListe dés sa création?
    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 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int tab[] = {1, 2, 3, 4, 5, 6};
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Non ce n'est pas possible.
    Mais il me semble qu'une proposition a été faite à ce sujet pour Java 7 (à confirmer).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 25
    Par défaut
    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");

  4. #4
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut
    Merci, cris9 pour ta solution.

    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.

    Vivement java 7

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par cris9
    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");
    Attention car dans ces deux cas la List obtenue n'est pas modifiable...


    Avec Java 5.0 tu peux utiliser l'ellipse pour te faire une méthode statique qui initialiserait la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    	}
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> list = newArrayList("a", "b", "c", "d", "e");

    Ou sinon encore plus générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    	}
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> list = init(new ArrayList<String>(), "a", "b", "c", "d", "e");

    a++

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Plusieurs solutions. La 3e est la meilleure dans le cas général.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<String> list = new ArrayList<String>() {{add("ch1"); add("ch2"); }};
    //-: complexe à lire et à écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<String> list = Arrays.asList("ch1","ch2");
    //+: interface pour manipuler un tableau
    //-: non resizable
    Attention quand même, le Arrays.asList(T... elements) peut être ambigüe.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Number> list = Arrays.asList(5, 2, 3); //ne compile pas
    Cette instruction ne compile pas, car Arrays.asList va retourner une List<Integer> que tu essaies d'affecter à une List<Number>.
    Pour que ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Number> list = Arrays.<Number>asList(5, 2, 3);

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par adiGuba
    Avec Java 5.0 tu peux utiliser l'ellipse pour te faire une méthode statique qui initialiserait la liste
    Cela existe déjà, Collections.addAll (j'ai découvert ça récemment grâce à Thinking In Java).

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ®om
    Cela existe déjà, Collections.addAll (j'ai découvert ça récemment grâce à Thinking In Java).
    Oui... je n'ai pas trop l'habitude de l'utiliser...

    Par contre ma méthode a un avantage : elle peut être utilisé en ligne (utile pour initialiser les attributs de classes )

    a++

  9. #9
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par adiGuba
    Par contre ma méthode a un avantage : elle peut être utilisé en ligne (utile pour initialiser les attributs de classes )
    Comment ça "en ligne"?

    EDIT: tu parles de newArrayList?

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ®om
    EDIT: tu parles de newArrayList?
    newArrayList() ou init() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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");
     
    }
    Mais bon c'est sûr qu'une gestion au niveau du langage serait plus approprié

    a++

  11. #11
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut
    merci pour votre aide

Discussions similaires

  1. Comment peut on initialiser une combobox sans fermer USF
    Par apdf1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/03/2011, 15h01
  2. Initialiser une arraylist
    Par harris_macken dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 18/03/2008, 16h59
  3. Réponses: 5
    Dernier message: 09/11/2006, 10h36
  4. [Débutant] Initialiser les propriétés de tous les objets d'une ArrayList
    Par Tententai dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 23/05/2006, 20h24
  5. [Debutant] clone d'une ArrayList
    Par blaise_laporte dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 02/05/2006, 17h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo