Parcourir une liste

Signaler
Messages postés
9
Date d'inscription
mardi 12 septembre 2017
Statut
Membre
Dernière intervention
20 septembre 2017
-
Messages postés
9
Date d'inscription
mardi 12 septembre 2017
Statut
Membre
Dernière intervention
20 septembre 2017
-
Bonjour,
voila jai une liste qui contient par exemple comme le montre la photo :


j'aimerais parcourir la liste recuperer le premier element puis le verifier dans toute la liste . si elle se repete je fait la somme du nombre d'heure puis j'insert la valeur dans une nouvelle liste . ainsi jusqu'a la fin .
donc au finish ma nouvelle liste ne doit pas avoir de doublons .
merci

1 réponse

Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
94
Bonjour,

Il n'y a pas de photo dans ton message...

Et si tu ne veux pas de doublon il faut considérer les Set, pas les List, qui elles peuvent avoir des doublons.
Messages postés
9
Date d'inscription
mardi 12 septembre 2017
Statut
Membre
Dernière intervention
20 septembre 2017
>
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020

ok avec le code suivant :

voila la liste qui contient mes donnees avec doublons ;
 List<JourneesTravaillees> listjr = new ArrayList<>();
               
             listjr =Utils.getIClass().DetailsPaie1(txtDateDebut1.getValue().toString(),txtDateFin1.getValue().toString());
  

    int mat=0 ;
    List<JourneesTravaillees> newList = new ArrayList<>();
    for(JourneesTravaillees lp:listjr)
    {
        double cpt=0;
        mat =lp.getPersonnel().getMatricule();
        for( JourneesTravaillees lps: listjr)
        {
            if(mat==lps.getPersonnel().getMatricule() && cpt!=0)
            {                 
               lp.setSalaireNetPercue(lp.getSalaireNetPercue()+lps.getSalaireNetPercue());
             
             }
            cpt++;
        }       
            newList.add(lp);
            listjr.remove(lp);
        
    }

colmat.setCellValueFactory(new PropertyValueFactory<>("matricule"));
            colnom.setCellValueFactory(new PropertyValueFactory<>("nom_journalier"));
            colnbheure.setCellValueFactory(new PropertyValueFactory<>("nb_heures"));
            coljournee.setCellValueFactory(new PropertyValueFactory<>("journee"));
            colSalisure.setCellValueFactory(new PropertyValueFactory<>("salissure"));
           colpanier.setCellValueFactory(new PropertyValueFactory<>("panier"));    
           colsalBase.setCellValueFactory(new PropertyValueFactory<>("salaire_base"));
           colsalcong.setCellValueFactory(new PropertyValueFactory<>("conges"));
           colsalbasecong.setCellValueFactory(new PropertyValueFactory<>("salBase_cong"));
           colpanierTotal.setCellValueFactory(new PropertyValueFactory<>("totalpanier"));
           colCalaireNet.setCellValueFactory(new PropertyValueFactory<>("salaireNetPercue"));
           tableview.setItems(FXCollections.observableArrayList((listjr)));
  


mais sa me signale une erreur au niveau de la premier boucle for :

Caused by: java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
94 >
Messages postés
9
Date d'inscription
mardi 12 septembre 2017
Statut
Membre
Dernière intervention
20 septembre 2017

Tu ne peux pas faire
listjr.remove(lp);
pendant que tu itères avec une boucle
for(JourneesTravaillees lp:listjr)

La liste sur laquelle tu boucles doit garder les même valeurs, sinon ça décalerait tout.
Messages postés
9
Date d'inscription
mardi 12 septembre 2017
Statut
Membre
Dernière intervention
20 septembre 2017
>
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020

si vous avez compris ce que j'essayait de faire alors que me suggerez vous comme solution ?
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
94 >
Messages postés
9
Date d'inscription
mardi 12 septembre 2017
Statut
Membre
Dernière intervention
20 septembre 2017

Je n'ai pas compris ce que tu essayais de faire, et je n'essaye même pas, c'est un code partiel, je n'ai pas le contexte, donc je me limite à l'analyse du bug.

Enlèves la ligne
listjr.remove(lp);
de ta boucle, et après ta boucle tu ajoutes
listjr.removeAll(newList)
Messages postés
9
Date d'inscription
mardi 12 septembre 2017
Statut
Membre
Dernière intervention
20 septembre 2017
>
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020

ok, merci
je vais le faire a plus