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 index par un attribut


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut map index par un attribut
    Bonjour tous le monde,
    avez vous une idee apropos d'un map (ou autre collection) indexe par un attribut d'un object je m'explique
    soit T le type que je cherche
    T<String,Personne> x = new T<String,Personne>();
    Personne y = new Personne("gfg","ghg",hkjh");
    x.put(y.getNom(),y);
    si je change le nom dans y je dois avoir la keys list dans x mis à jour.
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  2. #2
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Salut,

    Et si tu le fait manuellement ?

    Cad, au moment du changement du nom du Y, tu supprimes l'ancien key qui porte se nom et tu enregistres ton nouveau objet y avec la bonne clé. Comme ca t'aura ta keylist à jour je crois. A part que si tu trouves que ce petit traitement té couteux !

  3. #3
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    Je veux pas le faire si c'est deja fais
    et en plus ca serais pas manuellement le changement de valeur ca serais gerere par l'update model phase de JSF.
    bon j'ai trouve que le TreeMap lors du put:
    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
    54
    55
     
    public V put(K key, V value) {
      528           Entry<K,V> t = root;
      529           if (t == null) {
      530               // TBD:
      531               // 5045147: (coll) Adding null to an empty TreeSet should
      532               // throw NullPointerException
      533               //
      534               // compare(key, key); // type check
      535               root = new Entry<K,V>(key, value, null);
      536               size = 1;
      537               modCount++;
      538               return null;
      539           }
      540           int cmp;
      541           Entry<K,V> parent;
      542           // split comparator and comparable paths
      543           Comparator<? super K> cpr = comparator;
      544           if (cpr != null) {
      545               do {
      546                   parent = t;
      547                   cmp = cpr.compare(key, t.key);
      548                   if (cmp < 0)
      549                       t = t.left;
      550                   else if (cmp > 0)
      551                       t = t.right;
      552                   else
      553                       return t.setValue(value);
      554               } while (t != null);
      555           }
      556           else {
      557               if (key == null)
      558                   throw new NullPointerException();
      559               Comparable<? super K> k = (Comparable<? super K>) key;
      560               do {
      561                   parent = t;
      562                   cmp = k.compareTo(t.key);
      563                   if (cmp < 0)
      564                       t = t.left;
      565                   else if (cmp > 0)
      566                       t = t.right;
      567                   else
      568                       return t.setValue(value);
      569               } while (t != null);
      570           }
      571           Entry<K,V> e = new Entry<K,V>(key, value, parent);
      572           if (cmp < 0)
      573               parent.left = e;
      574           else
      575               parent.right = e;
      576           fixAfterInsertion(e);
      577           size++;
      578           modCount++;
      579           return null;
      580       }
    es que vous pensez qu'il fais dont j'ai besoin ??
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  4. #4
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Salut,
    Non, le changement de l'attribut nom ne va pas changer la liste des clés du Map.

    Tu peux soit utiliser autre chose comme clés, soit utiliser une autre technique à base d'indirection sur les clés et un système de lookup, mais c'est assez complexe et pas beau, mais surtout tu as toujours besoin d'une clé qui change pas (genre identifiant), voire même la référence si les objets ont une durée de vie assez longue.

Discussions similaires

  1. clé d'un Map formée par deux attributs
    Par kass28 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 14/05/2014, 09h18
  2. Réponses: 10
    Dernier message: 07/12/2006, 20h52
  3. Réponses: 6
    Dernier message: 06/03/2006, 13h38
  4. manipulation d'un fichier indexé par un arbre b
    Par nemya_1 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 21/01/2006, 19h30

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