Trier une liste avec SortedSet

Résolu/Fermé
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 - Modifié le 16 déc. 2017 à 14:23
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 - 16 déc. 2017 à 15:29
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

KX Messages postés 16597 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 septembre 2022 2 975
16 déc. 2017 à 14:40
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.
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 2
16 déc. 2017 à 15:03
Je viens d'essayer votre méthode mais ça ne marche pas. En effet, lorsque j'écris "jack albert fred luca" le résultat est luca...
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 2
16 déc. 2017 à 15:06
Je n'est qu'un string au final c'est assez bizarre
0
KX Messages postés 16597 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 septembre 2022 2 975 > histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018
16 déc. 2017 à 15:14
Si tu n'as qu'un String c'est parce que le TreeSet considère que tous tes mots sont égaux.

Comment as tu implémenté la méthode de comparaison ?
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 2
16 déc. 2017 à 15:14
Vous pouvez me montrer comment faire la méthode si j'implémente un comparator dans la classe Mot ? merci
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 2
16 déc. 2017 à 15:16
J'ai fais :

public class Mot implements Comparable<Mot>{
0