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

avec Java Discussion :

Faire une liste des objet créés .


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Par défaut Faire une liste des objet créés .
    Bonjour,

    Mon problème doit avoir été traité plusieurs fois, mais je ne trouve pas de réponse très claire, donc j'aimerai juste une validation de ma façon de faire.

    Si j'ai tout bien compris, il n'y a aucun moyen de faire une liste des objets déjà créés en mémoire vive du PC.
    Si je ne connais pas le nom de l'objet, impossible de l'atteindre.
    Il faut donc, au fur et à mesure que je crées des objets que je mette leur nom, et leur propriétés dans un tableau par exemple.

    Si je veux chercher un objet pour changer sont prix, sa couleur, ou autre, je dois fouiller mon tableau, trouver l'objet dans le tableau et ensuite agir sur l'objet.

    Exemple :
    je crée un objet poire, un pomme, un prune
    je ne peux pas dire, y a t'il un objet prune ?
    Puis, si oui, dire je change sont prix.

    Dans ce cas, je vais cherche prune dans un tableau, puis si je trouve prune je vais modifier le prix.

    Ai-je dit une bêtise ?

    Seconde question: si j'ai bien compris, on ne peut pas supprimer un objet. On met cette instance à null, c'est tout, et on laisse faire java.
    Donc, je supprime l'objet de mon tableau, (je sauvegarde le tableau) et il ne sera pas rechargé au démarrage de mon programme le lendemain.

    La encore, ai-je dit une bêtise ?

    Merci de vos réponses ?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par papilou86 Voir le message
    Si j'ai tout bien compris, il n'y a aucun moyen de faire une liste des objets déjà créés en mémoire vive du PC.
    Oui et non. En Java, il faut avoir accès une référence vers un objet pour pouvoir en faire quelque chose, comme le stocker dans une liste Mais on peut s'arranger pour avoir ces références pour en créer la liste quand on en a besoin. On peut créer aussi la liste et la remplir au moment de créer les objets.

    Citation Envoyé par papilou86 Voir le message
    Si je ne connais pas le nom de l'objet, impossible de l'atteindre.
    Il faut donc, au fur et à mesure que je crées des objets que je mette leur nom, et leur propriétés dans un tableau par exemple.
    Oui et non également. La programmation objet implique que l'objet connaisse ses propriétés. Inutile donc de les stocker dans un tableau. Mais il faut pouvoir accéder à l'instance d'objet que l'on veut traiter, par un moyen ou un autre.

    Mettons que j'ai la classe suivante qui définit mon objet :
    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
    28
    public class Person {
       private final String firstname;
       private final String lastname;
       private final LocalDate birthDate;
     
       public Person(String firstname, String lastname, LocalDate birthDate) {
               this.firstname=firstname;
               this.lastname=lastname;
               this.birthDate=birthDate;
       }
       public String getFirstName() {
               return firstname;
       }
       public String getLastName() {
               return lastname;
       }
       public LocalDate getBirthDate() {
               return birthDate;
       }
       public int getAge() {
               return Period.between(birthDate,LocalDate.now()).getYears();
       }
       @Override
       public String toString() {
           int age=getAge();
           return firstname + " " + lastname + " (" + age+ " an"+ (age>1?"s":"")+")";
       }
    }
    On peut les mettre dans une liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    List<Person> persons = new ArrayList<>();
     
    Person p1 = new Person("André","A", LocalDate.of(1948, Month.MAY, 12));
    persons.add(p1);
     
    Person p2 = new Person("Carole","B", LocalDate.of(1953, Month.DECEMBER, 17));
    persons.add(p2);
     
    Person p3 = new Person("Joseph","C", LocalDate.of(1963, Month.FEBRUARY, 21));
    persons.add(p3);
     
    Person p4 = new Person("Nathalie","D", LocalDate.of(1942, Month.NOVEMBER, 3));
    persons.add(p4);
    L'intérêt c'est qu'on peut traiter la liste dans une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(Person person : persons ) {
    	int age = person.getAge();
            System.out.println(person.getFirstName() +" a " + age + " an"+ (age>1?"s":""));
    }
    Ou par Stream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Person> personsOlderThan60 = persons.stream().filter(person-> person.getAge()>60).collect(Collectors.toList());

    Pour afficher l'age de Carole, on peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    persons.stream().filter(person-> "Carole".equals(person.getFirstName()).mapToInt(Person::getAge).forEach(age-> Ssytem.out.println("L'age de Carole est " +age));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    persons.stream().filter(person-> "Carole".equals(person.getFirstName()).forEach(person -> Ssytem.out.println("L'age de " + person.getFirstName() + " est " + person.getAge()));
    Si on doit très souvent chercher une person sur une information donnée, on pourra utiliser une Map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map<String, Person> mapByFirstName = persons.stream().collect(Collectors.toMap(Person::getFirstName, Function.identity()));


    Pour savoir s'il y a une Carole dans la liste précédente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boolean caroleExists = persons.stream().anyMatch(person-> "Carole".equals(person.getFirstName()));
    Citation Envoyé par papilou86 Voir le message
    Dans ce cas, je vais cherche prune dans un tableau, puis si je trouve prune je vais modifier le prix.
    On peut aussi utiliser un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Person[] personArray = { person1, person2, person3, person4 };
    for(Person person : personArray) {
         if  ("Carole".equalsIgnoreCase(person.getFirstName())) {
                // code à faire si firstname est Carole
         }
    }
    Citation Envoyé par papilou86 Voir le message
    Seconde question: si j'ai bien compris, on ne peut pas supprimer un objet. On met cette instance à null, c'est tout, et on laisse faire java.
    Donc, je supprime l'objet de mon tableau, (je sauvegarde le tableau) et il ne sera pas rechargé au démarrage de mon programme le lendemain.
    La suppression et l'ajout seront plus facile à gérer avec une List. Avec un tableau, il faudra penser toujours à ignorer les valeurs null. Un tableau ne peut pas changer de taille, donc il faut savoir dès le début le nombre d'éléments et se trimbaler plein de cases vides qui prennent de la mémoire pour rien et augmente les temps de traitement pour rien. Ou alors il faut gérer ça en créant des nouveaux tableaux et bouger les éléments, pour minimiser l'impact sur les performances.

    Citation Envoyé par papilou86 Voir le message
    On met cette instance à null, c'est tout, et on laisse faire java.
    Oui c'est le garbage collector qui s'occupe de libérer l'espace mémoire, quand il a le temps, ou que c'est indispensable, ou pour d'autres raisons algorithmiques. Cela se fait également quand on perd toute référence vers l'objet. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public int calculAge(LocalDate date) {
        Person p = new Person("","",date);
        return p.getAge();
    }
    L'objet créé sera perdu (sa référence ne sera plus connue du programme) dès que la méthode aura fini de s'exécuter.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre très actif
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Par défaut
    Merci pour toute ces réponses.
    Cela confirme ma façon de penser, et ça l'éclaire encore un peu plus.

    Il me reste encore du boulot à faire avant de tout comprendre mais j'avance....

    Merci à toi

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

Discussions similaires

  1. [XL-2007] TCD : Faire une liste des dates cochées dans le filtre "currentpage"
    Par ESVBA dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/09/2014, 00h22
  2. LIste des objets créés en Java
    Par apqmwnqmap dans le forum Général Java
    Réponses: 1
    Dernier message: 17/10/2008, 17h45
  3. [MySQL] Faire une liste des membres ! + trier par ordre !
    Par ghosty dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 01/08/2008, 12h32
  4. Supprimer une liste des objets
    Par Sun03 dans le forum JPA
    Réponses: 12
    Dernier message: 09/04/2008, 11h15
  5. Réponses: 20
    Dernier message: 18/06/2006, 11h44

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