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 :

toArray sur une collection


Sujet :

Collection et Stream Java

  1. #1
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut toArray sur une collection
    Bonjour,

    J'utilise une collection (Set) sur laquelle je souhaite utiliser la méthode toArray pour ensuite pouvoir faire quelque chose de se genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i = start; i <= limit; i++) 
    {
                jsa.add(resultats.get(i));            
    }
    Mon problème c'est que si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Object[] resultats = set.toArray(new Object[set.size()]);
    je n'ai pas de possibilité de faire un get(index) sur ma variable.

    Des idées ?

    edit : Je me répond à moi même.

    En fait on y accède de cette façon là : resultats[i] et non resultats.get(i)
    Désolé ce sujet peut-être supprimé.. (je débute :s)

  2. #2
    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,


    Pourquoi se compliquer la tête et ne pas tout simplement utiliser la boucle étendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (Object object : set) {
        jsa.add(object);
    }
    Ps : Au fait c'est quoi "jsa" exactement ?

    a++

  3. #3
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    jsa -> JSONArray

    mon but c'est de gérer la pagination d'un grid javascript via ma servlet. Donc je récupère les paramètres javascript qui la détermine.

    Start -> la première valeur jsa que je veux afficher
    Limit -> le nombre de valeur de ma jsa que je veux afficher.

    Si j'ai 200 valeurs en tout dans ma jsa et que je veux les afficher 50 par 50.
    Limit vaudra tjs 50;
    start vaudra 0 pour la première page, 50 pour la deuxième et ainsi dessuite. d'où l'utilité de faire mon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = start; i <= limit+start ; i++) 
    {
                jsa.add(resultats[i]);            
    }

  4. #4
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    Tu peux aussi passer par des List qui proposent la méthode subList(int, int), ce qui t'éviterais de le faire à la main.

  5. #5
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    J'utilise des collections (notament treeSet) car je fais des tris sur ces listes de JSONObject.

  6. #6
    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
    Justement : un Set est un ensemble et non pas une liste...

    a++

  7. #7
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Je suis perdu..

    En fait, j'utilise treeMap pour y stocker une liste de JSONObject :
    Map map = new TreeMap(); map.put(jso, "valeur");

    je me sers de "valeur" pour faire mes tris sur les jso de cette facon :
    Set set = new TreeSet(monComparator);
    set.addAll(map.entrySet());

  8. #8
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Il peut exister plusieurs solutions.

    La plus rapide serait de remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set set = new TreeSet(monComparator);
    set.addAll(map.entrySet());
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List list = new ArrayList(map.entrySet());
    et de donner le comparateur à ta TreeMap.

    Sinon, une autre solution peux consister à créer une classe fille de tes objets qui implémente Comparable et qui possède la valeur que tu stockait dans ta map.
    Tu ajoutes tous tes objets à une liste et dès qu'il y sont tous, tu fais un Collections.sort(maListe);
    Cette solution implique que tu puisses remplacer tes objets par ce nouvel objet.

    Il doit exister bien d'auters manières de faire, mais je ne connais pas assez le contexte pour t'aiguiller davantage.

  9. #9
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Merci pour vos réponses.
    Je débute et il est clair que mon code laisse encore à désirer niveau optimisation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tri alphabétique sur une collection
    Par samtheh dans le forum VBA Access
    Réponses: 6
    Dernier message: 18/06/2007, 14h50
  2. Probleme de scope sur une collection
    Par ataya dans le forum Struts 1
    Réponses: 10
    Dernier message: 23/02/2007, 19h19
  3. VBNET : Agir sur une collection de contrôles ?
    Par VinZent dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/11/2006, 09h01
  4. Réponses: 1
    Dernier message: 25/10/2006, 13h41
  5. [Struts] <logic:iterate> sur une collection d objets c
    Par trax020 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/05/2005, 00h11

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