Trier une liste avec SortedSet [Résolu/Fermé]

Signaler
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
-
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
-
Bonjour,
Je dois trier une liste<Mot mot> avec un SortedSet et comme implémentation TreeSet. Je suis obligé d'utilisé cette collection avec cette implémentation.

public List<Mot> trierOrdreAlphabetique(List<Mot> mots) {
List<Mot> result = new ArrayList<Mot>();
SortedSet<Mot> trier = new TreeSet<Mot>();
for(int i =0; i < mots.size(); i++) {
trier.add(mots.get(i));
}

Iterator<String> it = trier.iterator(); // problème ici car ça ne marche qu'avec un String

while (it.hasNext()) {
String epm = it.next();
result.add(result); // problème ici aussi car un String ne peut pas être ajouter dans une list<Mot>
}
return result;

}


Je dois également respecter la valeur retourné c'est à dire que ça doit rester une collection List<Mot>. Est-ce qu'il y aurait moyen de le trier? Merci


1 réponse

Messages postés
16366
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 juin 2021
2 849
Bonjour,

"problème ici car ça ne marche qu'avec un String"
Une Collection<E> donne un Iterator<E> donc si tu as une List<Mot> tu dois avoir un Iterator<Mot>

Remarque : dans 99% des cas, tu ne devrais jamais utiliser la classe Iterator, sauf à utiliser la méthode delete(), mais ce n'est pas ton cas.

Quant à ta méthode, elle peut s'écrire comme ceci :

public List<Mot> trierOrdreAlphabetique(List<Mot> mots) {
    return new ArrayList<>(new TreeSet<>(mots));
}

Attention : Mot doit implémenter l'interface Comparable<Mot> pour pouvoir être triée par un TreeSet, sinon il est nécessaire de construire le TreeSet avec un Comparator<Mot> et faire un addAll de la liste.
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
Vous pouvez me montrer comment faire la méthode si j'implémente un comparator dans la classe Mot ? merci
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
J'ai fais :

public class Mot implements Comparable<Mot>{
Messages postés
16366
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 juin 2021
2 849 >
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018

Oui, mais l'interface Comparable<Mot> a une méthode
public int compare(Mot other)
qui doit renvoyer un nombre négatif (si this < other), positif (si this > other) ou nul (si this = other)

Si par exemple, la méthode renvoie toujours 0, ça signifie que tous les mots sont égaux, or dans ton cas il faut indiquer comment se fait le tri par ordre alphabétique (ce qui dépend de la structure de ta classe Mot)
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
Et lorsque j'écris "bob jack" dans mon TextArea j'ai bien le mot "bob" à la position 0 de ma liste et "jack" à la position 1 de ma liste
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
Ah d'accord, j'ai compris merci.