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

Android Discussion :

utilisation d'une Map et écriture de données.


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut utilisation d'une Map et écriture de données.
    Bonjour.

    J'utilise un Map en y mettant différentes valeurs.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    map.put("valeurInt", 48);
    map.put("valeurDouble", 17,745) ;
    map.put("valeurName", "nameX" ) ;
    Jusque là, cela fonctionne sans problème, je peux les utiliser.
    Maintenant, j'aimerais pouvoir écrire ces données sur un fichier.
    Le probème est que je ne sais pas quel type de valeur est contenue.

    Si je caste en String par défaut, cela plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Set cles = monMap.keySet();
                Iterator it = cles.iterator();
                while (it.hasNext()) {
                    String cle = (String) it.next();
                    String valeur = (String)monMap.get(cle);
     
                }
    Savez vous comment procéder dans ce cas ?

    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    J'ai envie de dire, ça te sert à quoi de savoir ce que c'est et de caster ? Si c'est pas une String c'est pas une String, donc ne caste pas en String, et voilà plus de problème.

    Enfin... Si vraiment il y a une raison, tu peux utiliser instanceof :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Object valeur = monMap.get(cle);
    if(valeur instanceof String) {
      String s = (String)valeur;
      System.out.println("Premiere lettre: " + s);
    } else if(valeur instanceof Integer) {
      int i = (Integer)valeur;
      System.out.println("Valeur doublee: " + (i*2));
    }
    À noter que tous ces monMap.get() ne sont pas très efficaces si tu as une TreeMap par exemple.

    Il vaut mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(Map.Entry<String, ?> entry : monMap.entrySet()) {
      String cle = entry.getKey();
      Object valeur = entry.getValeur();
      // et la suite
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut
    Ce qu'il faut comprendre, sur l'inutilité de caster ici, c'est que quand tu mets tes int et tes double dans une Map, java les transforme en objet, ici Integer et Double (on appel ca du boxing). Et donc ils ont une methode toString(), qui va te renvoyer proprement la valeur en String. Donc pas besoin de caster, tu les concatene avec une String, ou tu appel toString(), et voilà.

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    Merci !

    Effectivement, il transforme bien la valeur en String.

    Il suffit d'utiliser Parse pour reconvertir selon les besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     int val = Integer.parseInt((String) obj.map.get("testInt"))) ;

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    Je reviens sur un point.

    Si par exemple, j'ai besoin d'utiliser la valeur du map, en fonction de ce qu'elle est ( int, String ou autre ), comment procéder, si déjà c'est possible étant donné que la valeur a été converti en String.
    J'essaye en utilisant l'Object java et le instanceof, mais ca plante dès qu'il s'agit d'autre chose que d'un String :

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
                 if (obj.map.containsKey(mapName)) {
                            if ( value instanceof String){
                                String val = (String) obj.map.get(mapName);
                                obj.map.remove(mapName);
                                obj.map.put(mapName, val + value );
                            }
                            if ( value instanceof Integer){
                                Integer val = Integer.parseInt((String) obj.map.get(mapName));
                                obj.map.remove(mapName);
                                obj.map.put(mapName, val + (int)value );
                            }
                        }
    Dans cet exemple, cela fonctionne si mas value est un String, mais si c'est une int, ca plante.

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    OK, j'ai trouvé.

    Il suffisait de reconvertir en String le résultat, car il semblerait qu'il ne le refait pas automatiquement :

    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
     
     
            if (obj.map.containsKey(mapName)) {
                            if ( value instanceof String){
                                String val = (String) obj.map.get(mapName);
                                obj.map.remove(mapName);
                                obj.map.put(mapName, val + value );
                            }
                            if ( value instanceof Integer){
     
                                int val = Integer.parseInt((String)obj.map.get(mapName)) ;
                                int valAdd = (int)value ;
                                obj.map.remove(mapName);
                                obj.map.put(mapName, "" + (val + valAdd) );
                            }
                        }
    Merci pour votre aide.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/06/2012, 16h13
  2. Utilisation d'une map dans les GSP
    Par Iverstan dans le forum Grails
    Réponses: 2
    Dernier message: 01/04/2011, 19h42
  3. Réponses: 10
    Dernier message: 06/02/2008, 17h35
  4. Problème d'utilisation d'une map
    Par Mindiell dans le forum SL & STL
    Réponses: 18
    Dernier message: 06/09/2007, 22h49
  5. Réponses: 5
    Dernier message: 26/05/2005, 15h40

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