Bonjour,
je ne sais pas quels mot clefs chercher, j'espère que la question n'a pas déjà été posée (désolé sinon).
J'aurais besoin de votre aide, parce que j’ai le problème suivant :
Je veux enregistrer des informations structurés de cette manière :
- pour chaque identifiant (ex : id_client), j’ai une liste d’un type d’information (ex : td = l’horodatage de la première action du client), et pour chacune de ces premières actions, j’ai une nouvelle liste d’information (ex : tf = horodatage de la dernière action du client).
Pour chaque id_client, j’ai un/plusieurs horodatage de début td et pour chaque td, j’ai un/plusieurs horodatage de fin tf :
Pour coder ça, j’avais au début créé trois listes distinctes
Mais c’était pas super pratique pour traiter les cas par exemple, où je veux supprimer un client (faut détecter quelles td correspondent à l’id_cl etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 List<Integer> id_cl ; List<List<Double>> td ; List<List<List<Double>>> tf.
à la place, j’ai créé deux objets Client et TimeInfo, avec :
Le problème que j’ai maintenant est le suivant : comment traiter efficacement les listes, par exemple pour avoir des choses comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 List<Client> clients ; avec*: Client{int id_cl ; List<TimeInfo> time} ; avec : TimeInfo{double td ; List<Double> tf}
⇒ liste des "tf" pour un client particulier ;
⇒ liste des "tf" de tous les clients ;
A chaque fois, je fais des boucles « for » mais je pense que c’est très cher en calcul.
Par exemple je fais :
⇒ liste des tf pour un client particulier id_cl = 1 :
Une solution que je n’aime pas, serait de créer à la fois les listes et les objets :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 List<Double> tf_list = new Arraylist<Double>() ; for (int ti = 0; ti< clients.get(id_cl).getTimeInfo().size() ; ti++) { for (int tfi = 0:tfi<clients.get(id_cl).getTimeInfo().get(ti).getTFinal().size();tfi ++) { tf.add(clients.get(id_cl).getTimeInfo().get(ti).getTFinal().get(tfi)); } } }
Et où les listes td/tf seraient mis à jour à chaque insertion et recréé à chaque délétion, mais je ne suis pas convaincue de ce qui est le mieux (listes + objets = cher en mémoire ; objets seuls = cher en parcourt de listes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 List<Client> id_cl; List<List<Double>> td; List<List<List<Double>>> tf. Client{int id_cl ; List<TimeInfo> time}, avec : TimeInfo{double td ; List<Double> tf}
Auriez vous des recommandations ?
Y a t’il un autre moyen ? Notamment, je cherche quelque chose du type :, où « : » traiterait tous les cas, sans avoir besoin de tout reparcourir par une boucle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part clients.get(:).getTimeInfo().get(:).getFinalTime()
Merci!
[EDIT] : j'ai trouvé les lambda expressions pour avoir par exemple :mais même si c'est plus agréable à lire, il me semble que c'est tout aussi cher en calcul qu'une boucle, non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part list.forEach(System.out::println);
Partager