Supprimer les doublons dans une liste

Résolu
aboubakr664 - 23 sept. 2017 à 13:32
 aboubakr664 - 23 sept. 2017 à 14:50
Bonjour,
ici, j'ai une liste qui contient plusieurs éléments avec des doublons
Voici les codes:
listjr est ma liste de pemiere avec des doublons et je voudrais le parcourir, puis récupérer dans les nouveaux éléments de liste de listjr peut sans doublons.


List<JourneesTravaillees> listjr = new ArrayList<>();
listjr = Utils.getIClass().DetailsPaie(txtDateDebut1.getValue().toString(), txtDateFin1.getValue().toString());


Set set = new HashSet();
set.addAll(listjr);
List<JourneesTravaillees> newlist= new ArrayList(set);
tableview.setItems(FXCollections.observableArrayList(Utils.transform1(newlist)));
colmat.setCellValueFactory(new PropertyValueFactory<>("matricule"));
colnom.setCellValueFactory(new PropertyValueFactory<>("nom_journalier"));
colnbheure.setCellValueFactory(new PropertyValueFactory<>("nb_heures"));
colsalBase.setCellValueFactory(new PropertyValueFactory<>("categorie"));
colCalaireNet.setCellValueFactory(new PropertyValueFactory<>("som"));

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
23 sept. 2017 à 14:19
Bonjour,

Pour que le HashSet fonctionne correctement il faut redéfinir les méthodes hashCode et equals dans ta classe JourneesTravaillees afin de savoir sur quels critères deux objets peuvent être considérés comme doublons.
0
merci mais comment ? en faisant mes recherche j'ai vu que cela .
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
23 sept. 2017 à 14:44
Dans la théorie il faut regarder la documentation de la classe Object dont hérite toutes les classes et qui définit ces deux méthodes :
En pratique, cela dépend des attributs de ta classe, c'est donc très spécifique à l'implémentation que tu en as faite.

Par exemple j'ai
class Point { int x, y; }
et j'utilises Eclipse pour générer automatiquement les deux méthodes, cela donne :

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + x;
    result = prime * result + y;
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Point other = (Point) obj;
    if (x != other.x)
        return false;
    if (y != other.y)
        return false;
    return true;
}

Evidemment, c'est de la génération automatique, ça peut se simplifier, et ce n'est qu'un exemple parmi d'autres de ce que l'on peut faire, ce qui compte c'est l'interprétation du résultat qui en est faite par des classes comme HashSet.
0
aboubakr664 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
23 sept. 2017 à 14:50
Merci bcp
Je lai fait et sa marche a merveille
Merci KK pour votre précieuse aide
0
Rejoignez-nous