Je suis débutant en programmation et j'ai deux cours. La première classe est:
public class User implements Comparable<User>
avec le champ int age
, constructeur et méthode d’interface remplacée
@Override
public int compareTo(User user) {
return user.age >= age ? -1 : 0;
}
La deuxième classe est public class SortUser
avec une méthode pour créer une collection Set à partir d'une liste:
public Set<User> sort(List<User> list) {
Set<User> result = new TreeSet<>();
for (User user : list) {
result.add(user);
}
return result;
}
Il me semble que tous les objets User
dans un ensemble doivent être triés, mais lorsque j'ai créé une liste avec 3 objets User
...
User a = new User(1);
User b = new User(2);
User c = new User(3);
List<User> list = new ArrayList<>();
list.add(c);
list.add(a);
list.add(b);
(Maintenant, l'ordre de la liste est: 312
) ... et a créé une Set
(TreeSet
) à partir de cette liste:
SortUser sortUser = new SortUser();
Set<User> set = sortUser.sort(list);
À la fin, j'ai une set
avec cet ordre: 13
, cela signifie que seuls deux objets sont dans la set
. Qu'est-ce qui ne va pas?
Comme je vois que vous avez une mauvaise implémentation de la méthode de comparaison. Pourriez-vous le mettre à jour?
@Override
public int compareTo(User user) {
return Integer.compare(age, user.age);
}
Veuillez suivre la méthodologie ci-dessous
En cas de ficelle.
public static Comparator<Employee> NameComparator = new Comparator<Employee>() {
@Override
public int compare(Employee e1, Employee e2) {
return e1.getName().compareTo(e2.getName());
}
};
En cas de valeurs entières
public static Comparator<Employee> SalaryComparator = new Comparator<Employee>() {
@Override
public int compare(Employee e1, Employee e2) {
return (int) (e1.getSalary() - e2.getSalary());
}
};
Classe d'utilisateurs
public class User implements Comparable<User>{
int age;
User(int age){age=age;}
@Override
public int compareTo(User user) {
return this.age >= age ? -1 : 0;
}
}
préparer la liste
User a = new User(1);
User b = new User(2);
User c = new User(3);
List<User> list = new ArrayList<>();
list.add(c);
list.add(a);
list.add(b);
pour le tri
Set<User> list1 = new TreeSet(list);