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 :

Map ou Dictionnary gérant des doublons distincts


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de JPDMJC
    Profil pro
    Inscrit en
    Février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 337
    Par défaut Map ou Dictionnary gérant des doublons distincts
    Bonjour,
    au jour d'aujourd'hui, j'utilise un jeu de HashMap pour représenter/stocker le contenu d'un fichier INI.
    Juste là, pas de soucis : une HashMap pour stocker les sections, les sections étant elles mêmes stockées sous forme de HashMap, ces dernières stockant les paires clef/valeur.

    Néanmoins, j'ai fait la bêtise d'oublier le cas suivant, un fichier INI du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [foo]
    c1
    c2
    [bar]
    .....
    [foo]
    c3
    c4
    Ben oui, une section (ici foo) peut être éclatée à travers tout le fichier.

    A première vue cela ne pose pas problème : je peux toujours remplir mes HashMap, je me retrouverai donc avec la grande HashMap contenant les clefs "foo" et "bar", la sous-HashMap correspondant à "foo" stockant les 4 clefs c1 à c4.
    Mon jeu de HashMap est du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private Map<String, 
                    Map<String, 
                        GConIniEntry>> contentTable;
    (où GConIniEntry est un objet contenant la valeur de la clef, mais d'autres infos/méthodes qui -dans ce sujet- n'ont aucun intérêt)

    Mais voilà, il faut à tout prix que mon jeu de HashMap soit à l'image de mon fichier : en parcourant mon jeu de HashMap, je dois être capable de reconstituer le fichier INI. Or, pour l'instant, le fichier INI que je pourrais reconstituer ressemblerait plutôt à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [foo]
    c1
    c2
    c3
    c4
    [bar]
    ...
    et ça je n'en veux pas, mais alors pas du tout du tout .

    Bref, je cherche - si possible dans les paquetages standards, un moyen d'avoir une Map ou Dictionnary qui me permette d'avoir non seulement des doublons, mais aussi de stocker ces doublons à des endroits différents de cette Map ou Dictionnary. Biensûr, avec les méthodes get/set permettant de manipuler les occurrences de ces doublons (et pas seulement le premier).
    Je parle de HashMap & co car il me faut de très bonnes performances, et surtout constantes (la lecture du dernier enregistrement doit être aussi rapide que la lecture du premier).

    Aussi, les paquetages de Jakarta-commons-collections pourraient m'aider (la classe HashBag a l'air de gérer les doublons, mais subsiste le soucis de doublons à des positions différentes), mais j'essaie d'éviter les dépendances : je conçois une bibliothèque dont l'un des objectif est une légèreté maximale, dont zéro dépendances.
    En dernier recours, je développerai la classe moi-même, mais bon si ça existe déjà ...


    Merci d'avoir pris le temps de lire ce gros bazar

  2. #2
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Pourquoi ne pas definir ta Map ainsi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private Map<String[], 
                    Map<String, 
                        GConIniEntry>> contentTable;
    ou ton String[] pourrait ressembler a ca :

    foo, 1
    bar, 1
    foo, 2

    etc ...

  3. #3
    Membre expérimenté Avatar de JPDMJC
    Profil pro
    Inscrit en
    Février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 337
    Par défaut
    effectivement ça pourrait pas mal m'aider
    Merci !

    Parcontre je viens de réaliser que ma HashMap ne gardait pas l'ordre dans lequel j'insère : le premier inséré n'est pas le premier lorsque l'on liste le contenu de la map. Enfin bon soit il y a une map qui garde cet ordre (ça doit pas être difficile à trouver si ça existe), soit j'implémente ma propre Map (finalement c'est tout simple ^^).

    En tout cas merci !
    Résolu.

  4. #4
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Avec un comparateur, tu peux ordonner des collections.
    --> classe java.util.Comparator

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Mouaip sinon tu as les fichier properties pour java afin de remplacer les INI...
    Histoire de ne pas réinventer la roue.

    Et dans un fichier properties il suffit de les categoriser de la façon suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    categorie1.option1=truc
    categorie1.option2=machin
    ...
    categorie3.option5=bidule
    ...

    ENsuite il suffit d'utiliser la classe properties et ses méthodes load/save pour charger/sauver le fichier, et getProperty/saveProperty pour récupérer/modifier les valeurs des clefs

  6. #6
    Membre expérimenté Avatar de JPDMJC
    Profil pro
    Inscrit en
    Février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 337
    Par défaut
    le but de mon projet est de prendre en charge un maximum de formats, je dois donc passer par la case INI ^^, sinon c'est certain je m'en passerai bien.

    Je vais zieuter les comparateurs.

    En tout cas merci pour tout.

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

Discussions similaires

  1. distinct .. y a t il pas des doublons dans mabase ?
    Par zin_rbt dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/03/2010, 20h27
  2. Eliminer des Doublon dans une Table
    Par Soulama dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/02/2005, 14h27
  3. 1 Table, Des doublons, ne rertenir que certains d'entre eux
    Par Dragano dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/01/2005, 12h06
  4. Effacer des doublons
    Par ben53 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/07/2004, 17h56
  5. Réponses: 2
    Dernier message: 07/07/2004, 17h44

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