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

avec Java Discussion :

Tri sur les valeurs d'une HashTable avec duplicats


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Femme Profil pro
    Consultant en sécurité
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut Tri sur les valeurs d'une HashTable avec duplicats
    Bonjour,

    J'ai une HashTable qui contient des duplications de valeurs sur certaines clefs. Genre :

    "cle1", "aaaa"
    "cle2", "cccc"
    "cle3", "bbbb"
    "cle4", "aaaa"

    J'aimerais la trier sans perdre le doublon cle1 ou cle4.
    J'ai trouvé comment trier sur les clefs :
    Map listetrier=new TreeMap(ListeBrute);
    Mais j'ai besoin de trier les valeurs...

    A l'heure actuelle, j'ai ça :
    HashMap ListeTrier = new LinkedHashMap();
    List yourMapKeys = new ArrayList(ListeBrute.keySet());
    List yourMapValues = new ArrayList(ListeBrute.values());
    TreeSet sortedSet = new TreeSet(yourMapValues);//Ceci supprime les doublons !!!!!!!!!!!
    Object[] sortedArray = sortedSet.toArray();
    int size = sortedArray.length;
    for (int i=0; i<size; i++)
    {
    ListeTrier.put(yourMapKeys.get(yourMapValues.indexOf(sortedArray[i])), sortedArray[i]);
    }


    Je n'ai plus trop le temps de chercher, et j'ai peur de me lancer sur un quicksort non récursif(pour aller +vite) basé sur mes HashTable.value...


    Une suggestion?

    Cordialement,
    Jérôme

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Pour trier une Map<String,String> maMap:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TreeSet<Map.Entry<String,String>> ts = new TreeSet<Map.Entry<String,String>> (monComparator);
    ts.addAll(maMap.entrySet());
    nouvelleMap = new LinkedHashMap<String,String>();
    for (Map.Entry<String,String> entry : ts){
        nouvelleMap.put(entry.getKey(),entry.getValue());
    }

    Et reste le monComparator, il implémente Comparator<Map.Entry<String,String>> et se base sur la valeur pour comparer


    voilà l'idée...

  3. #3
    Membre averti

    Femme Profil pro
    Consultant en sécurité
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut
    Hébien!
    Si tu me le permets c'est assez alambiqué comme solution.
    Je vais essayer...

    Sans mentir, j'aurais préféré : ListeTrier=HashTableValueSorter(ListeBrute);

    Je pourrais me remettre sur ce bout de code en début d'aprèm.

    Merci!

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par dje_jay Voir le message
    Hébien!
    Si tu me le permets c'est assez alambiqué comme solution.
    Je vais essayer...

    Sans mentir, j'aurais préféré : ListeTrier=HashTableValueSorter(ListeBrute);

    Je pourrais me remettre sur ce bout de code en début d'aprèm.

    Merci!
    Pas vraiement, c'est les generic qui surchargent la notation

    Je fait simplement un sortedSet qui contient les Map.Entry, Map.Entry que je classe en lui fournissant un comparator qui va comparer les entry.value. Une fois que t'as ton sortedset de Map.entry dans l'ordre, t'as plus qu'à le transferer dans une nouvelle map, dans cet ordre précis.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/09/2012, 20h29
  2. Réponses: 4
    Dernier message: 04/05/2012, 17h23
  3. Filtrer une liste sur les valeurs d'une colonne
    Par julien.63 dans le forum SharePoint
    Réponses: 3
    Dernier message: 13/02/2009, 08h43
  4. Réponses: 2
    Dernier message: 04/09/2008, 13h41
  5. Réponses: 3
    Dernier message: 20/07/2007, 11h33

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