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 :

HashMap : Changer la valeur d'un objet référencé


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Par défaut HashMap : Changer la valeur d'un objet référencé
    Bonjour,

    je cherche à changer la valeur d'un String référencé dans une hashmap, au lieu de changer la référence de la clé de la map

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private String col1 = "defaut";
     
    private Map<Integer, String> cols = new HashMap<Integer, String>();
    cols.put(1, col1);
    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s = cols.get(1);
    s= "change"
    mon col1 vaut toujours defaut;

    idem avec
    cols.get(1).replace...

    Comment puis-je changer la valeur de ma variable col1 à partir de la map?

    Une solution serait peut-être de créer un objet MonString, ainsi faire un cols.get(1) me retournerait bien une référence vers l'objet et non une valeur, mais je ne peux pas car ma variable doit être un String.

    Merci d'avance

  2. #2
    Membre chevronné Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Par défaut
    Slt,
    Tu dois refaire un put sur la clé

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Par défaut
    Le problème reste le même, c'est la référence de la valeur associée à la clé qui change en effectuant un put, ma variable col2 ne change pas, elle n'est juste plus référencée par la map

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Map<Integer, String> cols = new HashMap<Integer, String>();
    col2="defaut";
    cols.put(2,col2)
    System.out.println(col2); //"defaut"
    l.cols.put(2, "change");
    System.out.println(cols.get(2)); //"change"
    System.out.println(col2);//"defaut"

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu ne peux pas, String est un objet immuable.
    Il faut que tu change la valeur de ton String dans ta map, puis que tu affectes de nouveau à ton attribut ton nouvel objet String.

    cols.get(1).replace...
    Te retourne une nouvelle instance de String

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Par défaut
    Ok merci, tant pis.

    j'ai en fait 20 variables
    String col1;
    String col2;
    ...
    String col20;

    L'idée était de pouvoir les modifier via une méthode de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setcol(int x, String val){
    this.colx = val;
    }
    J'ai donc tenté avec une map.
    Avez vous une autre idée autre que de passer par 20 setters avec un switch?

  6. #6
    Membre chevronné Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Par défaut
    Du mal à comprendre la finalité.
    Et ce que tu as demandé dans ton premier message n'est pas ce que tu demandes dans ton deuxième ou j'ai mal compris...

    Si tu passes par un StringBuffer ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     StringBuffer buff = new StringBuffer("Test1");  
      Map map = new HashMap();  
      map.put(1, buff);  
      buff.append("Test2");  
      sysout(buff)// devrait être égale à map.get(1) ce qui revient à ton idée de créer un objet
      sysout(map.get(1))
    ++

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Par défaut
    Non ce n'est effectivement pas la même chose, la demande initiale est résolue par le fait que cela ne soit pas possible via une hashmap (car String objet immuable).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Class Ligne{
    private String col1;
    private String col2;
    ...
    private String col20;
     
    }
    Je cherche une manière générique de modifier une colonne, via un setter unique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setcol(int x, String val){
    this.colx = val;
    }
    autrement ce sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    setcol(int x, String val){
    if(x == 1) this.col1= val
    else if(x==2) this.col2=val
    ...
    }

    j'avais imaginé une map mais c'est apparemment non.

    Peut-être devrais-je changer de topic, mais j'en profitait ici !

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    La question c'est plutôt : pourquoi utiliser 20 attributs ????
    Si demain tu dois gérer 500 colonnes tu va te taper 500 attributs ???


    Un simple tableau fait amplement l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Ligne{
    	private final String[] cols = new String[20];
     
    	public void setCol(int x, String val) {
    		this.cols[x] = val;
    	}
    }

    Ou à la rigueur une List pour plus de facilité surtout si la taille pourra varier...

    a++

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 04/10/2012, 13h14
  2. Copier la valeur d'un objet et non sa référence.
    Par NejNej dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/01/2010, 09h59
  3. [POO] Changer la source d'un objet (flash) en Javascript
    Par thomine dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/02/2008, 16h54
  4. changer la valeur d'un objet Int32
    Par duaner dans le forum C#
    Réponses: 21
    Dernier message: 09/08/2007, 15h38
  5. Changer la valeur de la MTU sur un LAN
    Par nin2 dans le forum Réseau
    Réponses: 3
    Dernier message: 19/02/2005, 15h47

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