Liste d'objets fusionnés affichés en double
Bonjour,
soit une liste, cette liste d'objets <HistoriqueChargement> comporte parfois des objets dont certains ont un attribut identique.
Si cet attribut "code" est donc identique, je souhaite "fusionner" ces objets dans une nouvelle liste.
Cependant, les objets ainsi fusionnés de ma nouvelle liste s'affiche en double. Si vous pouviez m'expliquer mon erreur.
Mon code :
Code:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| List<HistoriqueFichierFusionne> laNouvelleListe = new ArrayList<HistoriqueFichierFusionne>();
HistoriqueChargement historiqueChargementPrecedent = null;
for (HistoriqueChargement historiqueChargement : laListeDesHistoriqueChargement)
{
HistoriqueFichierFusionne leNouvelHistorique = new HistoriqueFichierFusionne();
for (int i = 0; i < laListeDesHistoriqueChargement.size(); i++)
{
if (historiqueChargementPrecedent == null)
{
historiqueChargementPrecedent = laListeDesHistoriqueChargement.get(0);
}
else
{
historiqueChargementPrecedent = laListeDesHistoriqueChargement.get(i);
}
if (historiqueChargement.getCode().compareTo(historiqueChargementPrecedent.getCode()) == 0)
{
leNouvelHistorique.setCode(historiqueChargement.getCode());
leNouvelHistorique.setAnnee(leFormulaire.getLesCriteresRechercheSuiviInterface().getAnneeRecherchee());
if (historiqueChargement.getLeTypeIntegrationFichier().equals(TypeIntegrationFichier.PREVISIONNELLE))
{
leNouvelHistorique.setDateIntegrationPrevisionnelle(historiqueChargement.getDateIntegration());
}
if (historiqueChargement.getLeTypeIntegrationFichier().equals(TypeIntegrationFichier.DEFINITIVE))
{
leNouvelHistorique.setDateIntegrationDefinitive(historiqueChargement.getDateIntegration());
}
if (historiqueChargementPrecedent.getLeTypeIntegrationFichier().equals(
TypeIntegrationFichier.PREVISIONNELLE))
{
leNouvelHistorique.setDateIntegrationPrevisionnelle(historiqueChargementPrecedent.getDateIntegration());
}
if (historiqueChargementPrecedent.getLeTypeIntegrationFichier().equals(TypeIntegrationFichier.DEFINITIVE))
{
leNouvelHistorique.setDateIntegrationDefinitive(historiqueChargementPrecedent.getDateIntegration());
}
}
}
laNouvelleListe.add(leNouvelHistorique);
} |
Sortie en console :
976 2017 2017-05-01 08:00:00.0 2017-12-01 08:00:00.066
976 2017 2017-05-01 08:00:00.0 2017-12-01 08:00:00.066
B21 2017 2017-05-01 08:00:00.0 2017-12-01 08:00:00.008
B21 2017 2017-05-01 08:00:00.0 2017-12-01 08:00:00.008
Par avance, je vous remercie de votre aide
Liste d'objets fusionnés affichés en double
Bonjour,
Merci d'avoir pris le temps d'analyser ma demande et pour tes explications très claires.
Effectivement :
Code:
historiqueChargementPrecedent = laListeDesHistoriqueChargement.get(i);
suffit pleinement, et equals() à la place de compareTo() est plus logique et simple.
L'affichage des objets sans "doublon" dans la liste est effectivement voulu.
Pour ce qui est de :
Code:
Map<TypeDuCode,List<HistoriqueChargement>> map = list.stream().collect(Collectors.groupingBy(HistoriqueChargement::getCode));
eclipse m'indique : "change project compliance and jre to 1.8" et je ne peux changer de version pour diverses raisons.
Dans ta réponse tu fais référence à différentes techniques par parcours pour résoudre ce problème de dédoublonnage et de fusion.
Peux-tu m'en dire plus STP.
Par avance merci et bonne journée.