web-dev-qa-db-fra.com

Comment remplacer compareTo (Java)

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?

4
aLittleMind

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);
}
6
Roma Khomyshyn

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());
    }
};
1
Lova Chittumuri

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);
0
rathna