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 :

Modification d'un objet dans une map


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Par défaut Modification d'un objet dans une map
    Bonjour à tous,
    Je cherche à modifier la valeur d'un objet dans un HashMap, et je n'ai malheureusement pas réussi à trouver mieux que ce code pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HashMap<Character,Integer> dico = new HashMap<Character,Integer>();
    (...)
    Integer nbOcc = dico.get(caractereLu);
    nbOcc++;
    dico.remove(caractereLu);
    dico.put(caractereLu,nbOcc);
    En effet, JAVA ne permet pas de faire dico.get(caractereLu)++;
    Y a-t-il une autre solution que de lire la valeur, la modifier, puis supprimer avant de réinserer ? C'est quand même plutôt moche...

  2. #2
    Membre expérimenté Avatar de Roy Miro
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 273
    Par défaut
    Bonjour,

    En java 5 et supérieur, lorsque tu as un Integer i, pour l'incrémenter tu fais juste i++;
    Tu n'as pas à l'incrémenter et le reboxer. Java 5 te l'incrémente puis te l'autoboxe "behind the scene" simplement.

    Ce code est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Integer nbOcc = dico.get(caractereLu);
    nbOcc++;

  3. #3
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Par défaut
    j'avais essayé mais ça ne marchait pas, je vais retester.

  4. #4
    Membre expérimenté Avatar de Roy Miro
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 273
    Par défaut
    Effectivement dans ton exemple avec la HashMap, j'ai le même souci

    Je viens de retester:
    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
    import java.util.HashMap;
     
    public class Test {
    public static void main(String[]args){
     
    	HashMap<String,Integer> dico = new HashMap<String,Integer>();
    	dico.put("one", new Integer(0));
    	Integer i = dico.get("one");
    	i++;
    	System.out.println(dico.get("one"));//affiche 0
     
    	Integer i2 = new Integer(10);
    	i2++;
    	System.out.println(i2);//affiche 11
     
    }
    }
    J'y réfléchis

  5. #5
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    C'est normal, Integer est un type immutable, une fois l'objet construit, il n'est plus modifiable.
    Tu peux faire ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static class Compteur {
    	int n;
    }
     
    HashMap<Character,Compteur> dico = new HashMap<Character,Compteur>();
    Compteur nbOcc = dico.get(caractereLu);
    if (nbOcc == null) {
    	nbOcc = new Compteur();
    	dico.put(caractereLu, nbOcc);
    }
    nbOcc.n++;

  6. #6
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Par défaut
    Oo Je ne savais même pas que cela existait... Est ce pareil pour Character ? Quel est l'intérêt et d'où cela vient-il ?

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

Discussions similaires

  1. Gestion d'identifiants d'objets contenus dans une Map qui transite entre 2 bundles
    Par Laurent.B dans le forum Plateformes réactives et architectures modulaires
    Réponses: 7
    Dernier message: 21/05/2012, 10h50
  2. [VB.NET] Suppression d'objets dans une collection
    Par master56 dans le forum VB.NET
    Réponses: 7
    Dernier message: 03/06/2010, 21h46
  3. Réponses: 0
    Dernier message: 27/03/2008, 00h18
  4. [Delta3d] probléme avec un objet dans une map
    Par astragoth dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 27/03/2006, 14h49
  5. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 10h39

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