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

Java Discussion :

Trier des replicats


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Par défaut Trier des replicats
    Bonjour

    Je tourne en rond sur une problematique de tri de replicats. J'ai creer une ArrayList d'objet qui ont comme instance un nom précis et peuvent se retrouver plusierus fois dans cette ArrayList. je voudrais pouvoir envoyer ces objets dans un vecteur mais chacun en un seul exemplaire.... probleme simple j'en conviens mais je coince...

    d'avance, merci pour toute aide.

    nOnO

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Solution 1: définir une méthode equals dans ta classe, et passer par un java.util.Set.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class MaClass {
         private String name;
     
         @Override
         public boolean equals() {
              // Comparaison sur le champ name
         }
    }
     
    List<MaClasse> listeAvecDoublon = ...;
    Set<MaClasse> setSansDoublon = new HashSet<>(listeAvecDoublon );
    Solution 2:
    Marquer dans une autre liste les noms que tu as déjà envoyé, et pour chaque
    element de la liste à envoyer, vérifier si le nom n'a pas déjà été envoyé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    List<MaClasse> listeAvecDoublon = ...;
    List<String> nomsEnvoyes = new ArrayList<>();
    for(MaClasse obj : listeAvecDoublon ) {
        if(! nomsEnvoyes .contains(obj.getName())) {
            // envoyer obj
            nomsEnvoyes.add(obj.getName());
        }
    }

    Edit :
    /!\ Si tu peux avoir des objets différents mais avec le même nom. La solution 1 n'a pas vraiment de sens même si techniquement ça marche. La méthode equals est faite pour comparer deux objet dans leur ensemble, pas seulement sur un champ.

  3. #3
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Personnellement, je n'aime pas redefinir equals pour ce genre de probleme (equals est utilisé par pas mal de methodes auxquelles on pense pas toujours donc à manier avec précaution). D'autant que si par la suite, tu es amené à modifier la condition de doublon, il pourrait y avoir des effets de bords auxquels tu n'as pas pensé. Quand on modifie equals, on serre toujours les fesses dents.

    Dans un cas comme le tien, je verifierais simplement si ma liste contient deja un objet dont le nom est le meme avant de l'inserer :

    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
    ArrayList<MaClass> getListSansDoublons(ArrayList<MaClass> listAvecDoublons)
    {
       ArrayList<MaClass> listSansDoublons = new ArrayList<MaClass>();
       for(MaClass m : listAvecDoublons)
       {
          int i = 0;
          boolean stopSearch = false;
          while((i < listSansDoublons.size()) && (stopSearch == false))
          {
             stopSearch = listSansDoublons.get(i).getName().equals(m.getName());
             i++;
          }
          if(stopSearch == false)
          {
             listSansDoublons.add(m);
          }
       }
       return listSansDoublons;
    }

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Personnellement, je n'aime pas redefinir equals pour ce genre de probleme (equals est utilisé par pas mal de methodes auxquelles on pense pas toujours donc à manier avec précaution).
    Tu as raison, ça rejoint un peu le sens de mon edit.

    @le.nono
    Je n'avais pas vu que tu voulais "envoyer" dans un vecteur (Lecture un peu trop rapide). Donc oui, la solution la plus simple est de regarder si ton vecteur contient déjà un élément de même nom tel que l'a proposé hwoarang.

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Je rejoins le fait que trier le equals peut être assez casse gueule. Surtout si parla suite il utilise une HashMap ou un truc du genre.

    Le mieux reste en effet une vérif à l'envoi.

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    Citation Envoyé par deathness Voir le message
    Je rejoins le fait que trier le equals peut être assez casse gueule. Surtout si parla suite il utilise une HashMap ou un truc du genre.

    Le mieux reste en effet une vérif à l'envoi.
    En parlant d'HashMap, ça marche peut être en utilisant une :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      ArrayList<MaClass> getListSansDoublons(ArrayList<MaClass> listAvecDoublons)
      {
        HashMap<String, MaClass> hashedList = new HashMap<String, MaClass>();
         for(MaClass m : listAvecDoublons) {
           hashedList.put(m.getName(), m);//Si la clé existe déjà, elle est remplacée.
         }
         return new ArrayList<MaClass>(hashedList.values());
      }

  7. #7
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Par défaut
    Merci pour vos reponse j'ai pu trouver la solution!

  8. #8
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par le.nono Voir le message
    Merci pour vos reponse j'ai pu trouver la solution!
    N'oublie pas de passer ton sujet à résolu s'il l'a effectivement été (bouton ).
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

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

Discussions similaires

  1. Trier des objets sans Comparable
    Par Shabata dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 13/03/2006, 13h55
  2. [PHP-JS] Trier des champs dynamiques
    Par Mehdi Feki dans le forum Langage
    Réponses: 8
    Dernier message: 22/12/2005, 23h39
  3. trier des fichiers avec un tableau flexgrid
    Par digger dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/12/2005, 15h20
  4. [TList]: trier des doubles
    Par PpPool dans le forum Langage
    Réponses: 6
    Dernier message: 11/08/2005, 11h34
  5. [VB.NET] XML - Trier des noeuds
    Par nako dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/06/2004, 09h13

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