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 :

mettre la valeur dans une liste


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut mettre la valeur dans une liste
    salut mes amis
    je n'arrive pas à mettre le résultat dans une liste



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public static void main(String[] args)   {
        ArrayList A = new ArrayList();
        A.add("a" );
        A.add("h" );
        A.add("v" );
        A.add("v" );
        A.add("h" );
        A.add("v");
        A.add("v");
     
     
       ArrayList B = new ArrayList();
       B.add("a" );
       B.add("h" );
       B.add("v");
     
     
       ArrayList F = new ArrayList();
      int d=0; 
      for (int i =0;i<B.size();i++){
        for (int j =0;j<A.size();j++){
         String Q1=B.get(i).toString();
         String Q2=A.get(j).toString(); 
            if (Q1.equals(Q2)==true){
            d++;
     
     
         }
     
        }
     
     
     
     
         System.out.println("résultat de  " +  B.get(i) +" "+"égal :"+  d);
         d=0;
      }
     
      }
    je cherche de mettre résultat d dans la liste F donc j'aurais F= {1,2,4} puis ajouter une condition if (d<1) alors supprimer a de la liste B alors j'aurais B={h,v}

  2. #2
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
        public static void main(String[] args)
        {
            // Noms et leur nombre d'occurences (ton B en clé, ton F en valeur)
            Map<String, Integer> nbByName = new HashMap<String, Integer>();
            nbByName.put("a", 0);
            nbByName.put("h", 0);
            nbByName.put("v", 0);
     
            // Occurences de valeurs (ton A)
            List<String> names = new ArrayList<String>();
            names.add("a");
            names.add("h");
            names.add("v");
            names.add("v");
            names.add("h");
            names.add("v");
            names.add("v");
     
            for (String name : names)
                 if (nbByName.containsKey(name))
                     nbByName.put(name, nbByName.get(name) + 1);
     
            System.out.print(Arrays.toString(nbByName.values().toArray())); // Affiche [1, 2, 4]
     
            // Les noms qui sont présents plusiseurs fois
            List<String> multiples = new ArrayList<String>();
     
            // Garder les noms qui sont présents plus d'une fois
            for (Map.Entry<String, Integer> couple : nbByName.entrySet())
                if (couple.getValue() > 1)
                    multiples.add(couple.getKey());
     
            System.out.print(Arrays.toString(multiples.toArray())); // Affiche [h, v]
     
        }

  3. #3
    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
    Alors, là, bravo benwit, pour avoir compris le problème demandé

    C'était pas facile

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    merci mais est ce que si c'est possible utiliser ArrayList car j'ai une base de donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String s = "select * from test";
                ResultSet resulta = instruction.executeQuery(s);
                ArrayList A = new ArrayList();
          while (resulta.next()) {
                     String nom2 = resulta.getString("code");
                     A.add(nom2);
          }

  5. #5
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    @ ®om, je me suis fait un noeud au cerveau !

    @ ulysse031
    1/ Ton tableau A rempli à partir de ton dernier exemple, c'est bien une liste dans ton code (names dans le mien)
    2/ Et même, où est le problème si c'est B car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       String s = "select * from test";
       ResultSet resulta = instruction.executeQuery(s);
       Map<String, Integer> A = new HashMap<String, Integer>();
       while (resulta.next()) {
                     String nom2 = resulta.getString("code");
                     A.put(nom2, 0);
       }
    Mais bon, puisque la nuit porte conseil, tu peux faire également :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    public static void main(String[] args)
    {
        ArrayList A = new ArrayList();
        A.add("a" );
        A.add("h" );
        A.add("v" );
        A.add("v" );
        A.add("h" );
        A.add("v");
        A.add("v");
     
        ArrayList B = new ArrayList();
        B.add("a" );
        B.add("h" );
        B.add("v");
     
        ArrayList F = new ArrayList();
        int d=0; 
        for (int i=0;i<B.size();i++) // Parcours du tableau de référence
        {
             String Q1=B.get(i).toString(); // Mis ici pour éviter de recharger la valeur j fois alors qu'elle ne dépend pas de j.
     
             for (int j =0;j<A.size();j++) // Parcours des occurences
             {
                 String Q2=A.get(j).toString(); 
                 if (Q1.equals(Q2)==true)
                 {
                    d++; // compte les coccurences
                 }
             }
     
                    // Option 1 : Tu mémorise dans F les occurences de B
                    // F aura donc la même taille que B et F[i] donnera le
                    // nombre d'occurence de B[i] mais il te faudra alors
                    // raparcourir le tableau F à la fin pour pouvoir
                    // supprimer les B[i] qui ne sont présents qu'une fois.
                    // A décommenter si tu choisi l'option 1
                    // F.add(d); // ou F.add(i, d);
                    // d = 0; // On remet d à 0
     
                    // Option 2 : Tu mémorise dans F uniquement les B[i]
                    // qui apparaissent plus d'une fois, il n'y a alors plus à parcourir
                    // F mais tu n'as pas les occurences de chaque B
                    if (d > 1)
                       F.add(Q1);
                    d = 0; // On remet d à 0
     
        }   
     
        // Je le fais pas mais si tu choisi l'option 1, 
        // il faut que tu parcours F pour pouvoir virer les F[i] qui sont une seule fois
     
    }

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    je n'ai pas compris bien ta méthode et en plus est ce que si possible de mettre F.add(d) car on a l'habitude de mettre B.add("d")
    je coince encore je passe de heures pour m'avancer

  7. #7
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Bon, résumons car je suis perplexe :

    1/ Dans mon premier message, je t'ai donné une solution avec une HashMap qui fonctionne mais tu parais avoir du mal pour la remplir.

    2/ Dans mon deuxième message, j'ai peut être été un peu confus :

    Au début, je te donne donc une solution pour continuer avec ma 1° solution et la récupération via ta bdd.

    Puis, des idées m'étant venues entre temps, je te donne alors une autre solution plus proche de ton code original. Dans cette 2° solution, 2 options se présentaient :
    la 1° option qui consistait à mémoriser le nombre d'occurences dans F puis à effacer les éléments de B pour lequel d <= 1. Option non complètement implémenté parce que je pensais que mon option 2 était préférable.
    la 2° option ne mémorisant plus les occurences dans F mais directement les éléments de B pour lequel d <= 1.

    Visiblement, cela t'as perturbé. Donc je te propose une 3° et dernière solution se basant sur ton code initial et mettant en oeuvre explicitement ce que je suggérai dans l'option 1 de ma 2° solution.


    3/ Ma solution a ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
        public static void main(String[] args)
        {  
            ArrayList A = new ArrayList(); 
            A.add("a" ); 
            A.add("h" ); 
            A.add("v" ); 
            A.add("v" ); 
            A.add("h" ); 
            A.add("v"); 
            A.add("v");   
     
            ArrayList B = new ArrayList(); 
            B.add("a" ); 
            B.add("h" ); 
            B.add("v"); 
     
            ArrayList F = new ArrayList(); 
            int d=0; 
            for (int i=0;i<B.size();i++) 
            {  
                String Q1=B.get(i).toString(); 
                for (int j =0;j<A.size();j++)
                {
                    String Q2=A.get(j).toString(); 
                    if (Q1.equals(Q2)==true)  
                        d++;
                }
     
                F.add(d);
                d = 0;
            }
     
            System.out.print(Arrays.toString(F.toArray())); // Affiche [1, 2, 4]
     
            for (int i=0;i<F.size();i++) 
            {  
                d = (Integer) F.get(i);
                if (d <= 1)
                    B.remove(i);
            }
     
            System.out.print(Arrays.toString(B.toArray())); // Affiche [h, v]
        }
    Pour ton exemple, F et B contiennent bien ce que tu demandais dans ton post initial. Si cela ne te convient pas, soit plus explicite car je vais finir par croire que je n'ai rien compris à ton problème.

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    salut mon ami merci encore mais ça n'a pas marché un message d'rreur voila le message

    "arry.java": cannot resolve symbol: method add (int)in class java.util.ArrayList at line 39, column 18
    "arry.java": cannot resolve symbol: variable Arrays in class aa.arry at line 43, column 29
    "arry.java": incompatible types;found : java.lang.Integer,required: int at line 47, column 20
    "arry.java": cannot resolve symbol: variable Arrays in class aa.arry at line 52, column 29


  9. #9
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Désolé, c'est ma nouvelle habitude de programmer avec java 1.5 qui fait l'autoboxing.
    Comme tu dois utiliser une version de java < 1.5 :

    remplace F.add(d); par F.add(new Integer(d));

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    merci encore ami mais un message d'erreur sur la ligne
    System.out.print(Arrays.toString(F.toArray()));
    d = (Integer) F.get(i);
    System.out.print(Arrays.toString(B.toArray()));


    "arry.java": cannot resolve symbol: variable Arrays in class aa.arry at line 43, column 29
    "arry.java": incompatible types;found : java.lang.Integer,required: int at line 47, column 20
    "arry.java": cannot resolve symbol: variable Arrays in class aa.arry at line 52, column 29



  11. #11
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    ajouter en tête du fichier : import java.util.Arrays;

    et modifier

    d = (Integer) F.get(i);

    en

    d = ((Integer) F.get(i)).intValue();

  12. #12
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    merci mon cher ami jamais je vais oublier ton geste

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/04/2014, 07h57
  2. Réponses: 4
    Dernier message: 20/04/2006, 00h34
  3. VBA : ajouter une valeur dans une liste déroulante
    Par remi59 dans le forum Access
    Réponses: 4
    Dernier message: 22/12/2005, 10h01
  4. Réponses: 1
    Dernier message: 29/09/2005, 11h10
  5. Ajouter un valeur dans une liste modifiable
    Par ancylia dans le forum Access
    Réponses: 1
    Dernier message: 22/09/2005, 12h50

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