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 :

Conversion d'un map.get(key) en int


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut Conversion d'un map.get(key) en int
    Bonjour à tous,

    tout d'abord je suis étudiant, et j'ai commencé le java depuis peu. En ce moment je suis sur une application qui à partir de logs d'un serveur produit des statistique sur celui ci. Néanmoins je rencontre quelques difficultés et j'aimerai votre aide . Je m'explique:


    Je met les logs dans un tableau à 2 dimensions (ligne, informations).

    Par la suite, je crée une map avec comme clé le nom d'une base de donnée et en valeur je met le temps de connexion sur celle ci en milliseconde.

    Le problème survient : je souhaite convertir la valeur en int, pour pouvoir la mettre ensuite dans un format heure/minute/seconde.

    Je vous met la partie de mon code concerné, celui ci contient des erreures dont je suis conscient


    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
    Map map= new TreeMap();
          for(int i=0;i<x;i++)
            {
            Object o=map.get(Logsession[i][3]);
            if(o==null)
              map.put(Logsession[i][3],new Integer(Integer.parseInt(Logsession[i][1])));
            else
              {
                {
              Integer count = (Integer)o;
              map.put(Logsession[i][3],new Integer(count.intValue()+Integer.parseInt(Logsession[i][1])));
              }}
            }
    
          List keys=new ArrayList(map.keySet());
            Iterator iterator=keys.iterator();
            while(iterator.hasNext())
              {
              Object key=iterator.next();
              nbHour= Integer.parseInt((String)map.get(key))/(1000*60*60);
              modulo=Integer.parseInt((String)map.get(key))%(1000*60*60);
              nbMin=modulo/(60*1000);
              modulo=modulo%(60*1000);
              nbSec=modulo/1000;
              label=new JLabel("Temps de connexion sur la Database "+key+" : "+nbHour+" heures, "+nbMin+" minutes et "+nbSec+" secondes");
              }
    D'après ce que j'ai compris, il faut indiquer au compilateur le type de la valeur apres le map, d'où le (String)map.get(key). Ce qui est faux étant donné que plus haut je le converti.

    Et là je ne sais pas comment comment faire...

    J'espère que vous avez comprit mon problème et que vous pourrez m'éclairer .

    Merci d'avance.

  2. #2
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Bonjour,

    D'après ceci
    Citation Envoyé par Tarund
    je crée une map avec comme clé le nom d'une base de donnée et en valeur je met le temps de connexion sur celle ci en milliseconde.
    Ta map est du type Map<String,Integer>, si je me souviens bien, la clé d'une map est unique donc si tu as plusieurs fois la meme clé, lors d'un .put sur ta map, ca risque d'ecraser les valeurs au fur et à mesure.

    Citation Envoyé par Tarund
    Integer.parseInt((String)map.get(key))
    Tu as dans ta map les valeurs de type Integer donc lorsque tu vas faire un map.get(key) tu auras la valeur au type Integer, tu n'as donc pas besoin de la caster en String pour la reconvertir en Integer avec Integer.parseInt
    Citation Envoyé par Tarund
    List keys=new ArrayList(map.keySet());
    Iterator iterator=keys.iterator();
    while(iterator.hasNext())
    { Object key=iterator.next();
    nbHour= Integer.parseInt((String)map.get(key))/(1000*60*60); modulo=Integer.parseInt((String)map.get(key))%(1000*60*60); nbMin=modulo/(60*1000); modulo=modulo%(60*1000); nbSec=modulo/1000;
    label=new JLabel("Temps de connexion sur la Database "+key+" : "+nbHour+" heures, "+nbMin+" minutes et "+nbSec+" secondes");
    }


    tu peux le remplacer par plus simple peut etre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (int j = 0; j < map.size(); j++) {
    nbHour= map.get(j)/(1000*60*60);          
    modulo=map.get(j)%(1000*60*60);          
    nbMin=modulo/(60*1000);
    modulo=modulo%(60*1000);
    nbSec=modulo/1000;
    label=new JLabel("Temps de connexion sur la Database "+key+" : "+nbHour+" heures, "+nbMin+" minutes et "+nbSec+" secondes");
    }

  3. #3
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 133
    Par défaut
    De plus, la méthode parseInt(String) de Integer ne lève-t-elle pas des exceptions à catcher ? (NumberFormatException quelque chose comme ça ?)

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut
    Oui, en fait ce que je cherchais à faire c'etait de convertir la valeur en int, hors celle-ci est désignée comme étant de l'objet par la map alors qu'elle est en fait du type Integer (je m'y perd ! ).

    A force de bricolage j'ai trouvé quelque chose qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nbHour= ((Integer)(map.get(key))).intValue()/(1000*60*60);
    modulo=((Integer)(map.get(key))).intValue()%(1000*60*60);
    Quant à ton bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (int j = 0; j < map.size(); j++) {
    nbHour= map.get(j)/(1000*60*60);          
    modulo=map.get(j)%(1000*60*60);          
    nbMin=modulo/(60*1000);
    modulo=modulo%(60*1000);
    nbSec=modulo/1000;
    label=new JLabel("Temps de connexion sur la Database "+key+" : "+nbHour+" heures, "+nbMin+" minutes et "+nbSec+" secondes");
    }
    Celà ne marche pas, le map.get() n'accepte pas d'int en paramètre.

    Quoi qu'il en soit, je suis content d'avoir quelque chose qui marche désormais, je commençais a m'emmeler les pinceaux

    Merci pour votre aide

  5. #5
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Effectivement, j'ai fait ca de tete sans regarder l'API pour les Map et j'ai pensé à tord que le get d'une map prenait un int comme le get des listes, or il faut qu'il soit du type de la clé.

    Sinon content que ca marche

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 15
    Par défaut
    En ce qui concerne
    Zorm a écrit :
    tu peux le remplacer par plus simple peut etre:

    Code :
    for (int j = 0; j < map.size(); j++) {
    nbHour= map.get(j)/(1000*60*60);
    modulo=map.get(j)%(1000*60*60);
    nbMin=modulo/(60*1000);
    modulo=modulo%(60*1000);
    nbSec=modulo/1000;
    label=new JLabel("Temps de connexion sur la Database "+key+" : "+nbHour+" heures, "+nbMin+" minutes et "+nbSec+" secondes");
    }
    Un petite erreur, essaie avec JDK 5.0 ou plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
         Iterator itr = map.keySet().iterator();
         while (itr.hasnext()){
              Object key = itr.next();
              nbHour= map.get(key)/(1000*60*60);          
              modulo=map.get(key )%(1000*60*60);          
              nbMin=modulo/(60*1000);
              modulo=modulo%(60*1000);
              nbSec=modulo/1000;
              label=new JLabel("Temps de connexion sur la Database " + key 
                        + " : "+nbHour+" heures, " + nbMin + " minutes et " + nbSec 
                        + " secondes");
         }
    Avec JDK 1.4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
         Iterator itr = map.keySet().iterator();
         while (itr.hasnext()){
              Object key = itr.next();
              int milSec = ((Integer) map.get(key)).intValue();
              nbHour= milSec/(1000*60*60);          
              modulo=milSec%(1000*60*60);          
              nbMin=modulo/(60*1000);
              modulo=modulo%(60*1000);
              nbSec=modulo/1000;
              label=new JLabel("Temps de connexion sur la Database " + key 
                        + " : "+nbHour+" heures, " + nbMin + " minutes et " + nbSec 
                        + " secondes");
         }

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut
    Oui, c'est ce que j'ai fait, ça marche impec

    Merci

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

Discussions similaires

  1. mapping champs de type int avec longueur
    Par elbissat dans le forum Hibernate
    Réponses: 3
    Dernier message: 27/11/2007, 10h45
  2. Réponses: 1
    Dernier message: 17/10/2007, 14h01
  3. conversion d'une chaîne hexadécimale en 3 int
    Par loacast dans le forum C++
    Réponses: 2
    Dernier message: 27/02/2007, 15h45
  4. [mapping] composite key et objet en même temps
    Par Invité dans le forum Hibernate
    Réponses: 5
    Dernier message: 21/09/2006, 14h15
  5. conversion d'une chaine de caractère en int
    Par greg13 dans le forum C++
    Réponses: 3
    Dernier message: 25/08/2005, 16h18

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