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

Langage Java Discussion :

instances d'une classe différenciées


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par défaut instances d'une classe différenciées
    Bonjour tout le monde,

    J'ai un fichier xml :
    ...
    <error severity="warning" message="messageType1" source="type1"/>
    <error severity="warning" message="messageType2" source="type2"/>
    <error severity="warning" message="messageType1" source="type1"/>

    ...

    J'ai crée une classe qui serait le reflet d'une ligne du fichier XML avec comme partie privée :

    - private String source
    - private String message
    - private int nbItération


    Il existe dans ce fichier xml des lignes qui sont identiques (voir erreur de type1 ci dessus). Je voudrais stocker dans une liste les instances (de la classe ci dessus) pour tout les types de sources (type1, type2...). Cependant lorsque je tomberai sur un "type" que j'ai deja rentrer je voudrais incrémenter de 1 "nbIteration" de l'instance qui correspond au "type" afin de savoir combien de fois apparait ce type de ligne dans le fichier XML. Ce qui donne pour l'exemple ci dessus deux instances dans ma liste :

    {type1;messageType1;2}
    {type2;messageType2;1}

    Comment je peux faire pour savoir avant de rajouter dans ma liste un type si celui existe dejà sans avoir bêtement à parcourir celle-ci car il peut y'avoir 400 ou 500 lignes dans mon fichiers, donc 400 ou 500 type différents????

    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Par défaut
    Bonjour,

    D'une manière ou d'une autre il faudra parcourir.
    Maintenant, tu peux utiliser une HashMap en mettant le type de source en clef et tu auras ainsi à ta disposition la méthode containsKey qui permet de savoir si une clef est déjà présente ou pas.

  3. #3
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Sinon tu peux aussi utiliser n'importe quelle Collection et te baser sur la méthode contains de Collection en redéfinissant les méthodes equals et hashCode de ta classe Ligne...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par défaut
    Merci d'avoir répondu aussi rapidement,

    peux tu rentrer dans le detail de ton explication.

    Merci d'avance.

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Oui, je peux ^^
    Je te mets un squelette, à toi après de le compléter :

    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
     
    public class ErrorMessage{
    private String source;
    private String message;
    private int nbIteration;
     
    public boolean equals(Object o) {
    if !(o instanceof ErrorMessage)
      return false;
    ErrorMessage other = (ErrorMessage) o;
    return (source==null && other.getMessage()==null) || (source!=null && source.equals(other.getMessage());
    }
     
    public int hashCode(){
    if (source==null)
      return 0;
    return source.hashCode();
    }
     
    public void increment(){
      nbIteration++;
    }
    }
    (ne pas oublier les getters/setters)
    et après tu fais des (je ne mets pas de generics je ne sais pas en quelle version tu es)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ArrayList list = new ArrayList();
    ErrorMessage currentLine;
    for (...) {
      if list.contains(currentLine) {
        ((ErrorMessage) list.get(list.indexOf(currentLine))).increment();
    }
    else
      list.add(currentLine);
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par défaut Excellent mais ?
    Merci chtig,

    C'est exactement ce dont j'avais besoin. Cependant je me demande qu'elle est l'interet de redefinir la methode Hashcode puisque l'on redefini deja la méthode equals ? Est ce que c'est parce que celle-ci est utilisée lors de l'appel de la methode list.contain(...) ??

    Dans tous les cas merci.

  7. #7
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    En fait c'est une bonne pratique de redéfinir hashCode quand tu redéfinis equals, parce que hashCode a un contrat de renvoyer le même hashCode pour deux objets qui sont "égaux" au sens de equals.

    Sans le faire, j'ai déjà eu de belles surprises, mais de tête je ne saurais plus dire dans quel cas ^^
    En fait dans les API Java, pour des raisons de perfos (je suppose), il est souvent codé
    if (a.hashCode()==b.hashCode() && a.equals(b)) (pas forcément comme ça, mais c'est l'idée) au lieu de if (a.equals(b))

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par défaut C'est parfait
    Ok j'ai compris je saurais m'en souvenir.

    Merci pour tout,

    A bientot, ^^

  9. #9
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Pas de souci, n'oublie pas de mettre en résolu :-)

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

Discussions similaires

  1. Sauvegarder une instance d'une classe Java dans une BDD MySQL
    Par malag dans le forum Administration
    Réponses: 1
    Dernier message: 03/09/2006, 20h23
  2. Réponses: 2
    Dernier message: 17/01/2006, 14h18
  3. Connaitre toutes les instances d'une classe
    Par miniseb dans le forum Langage
    Réponses: 14
    Dernier message: 09/01/2006, 18h35
  4. connaitre l'instance d'une classe
    Par Jahjouh dans le forum C++
    Réponses: 8
    Dernier message: 25/11/2005, 23h44
  5. Réponses: 6
    Dernier message: 06/12/2004, 23h18

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