Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

535
Views
Cómo anular compareTo (Java)

Soy principiante en programación y tengo dos clases. Primera clase es:

 public class User implements Comparable<User>

con campo int age , constructor y método anulado de interfaz Comparable:

 @Override public int compareTo(User user) { return user.age >= age ? -1 : 0; }

La segunda clase es public class SortUser con un método para hacer una colección Set a partir de una Lista:

 public Set<User> sort(List<User> list) { Set<User> result = new TreeSet<>(); for (User user : list) { result.add(user); } return result; }

Me parece que todos los objetos de User en un conjunto deben ordenarse, pero cuando hice una lista con 3 objetos de 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);

(Ahora el orden de la lista es: 312 ) ...y creó un Set ( TreeSet ) de esa lista:

 SortUser sortUser = new SortUser(); Set<User> set = sortUser.sort(list);

Al final tengo un set con ese orden: 13 , significa que solo hay dos objetos en el set . ¿Qué está yendo mal?

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Como veo, tiene una implementación incorrecta del método de comparación. ¿Podrías actualizarlo a?

 @Override public int compareTo(User user) { return Integer.compare(age, user.age); }
about 4 years ago · Santiago Trujillo Report

0

Lo que estás haciendo con el TreeSet es innecesario. No estoy seguro de que estén garantizados para tener cierto orden cuando itera.

Simplemente reemplace su método de clasificación con

Collections.sort(list)

Y mi suposición de por qué se descarta un elemento es que su método compareTo nunca devuelve un 1 en ningún caso, por lo que los elementos siempre se consideran menores o iguales a otros elementos, lo que probablemente esté arruinando el TreeSet .

about 4 years ago · Santiago Trujillo Report

0

Siga la siguiente metodología

En caso de cadena.

 public static Comparator<Employee> NameComparator = new Comparator<Employee>() { @Override public int compare(Employee e1, Employee e2) { return e1.getName().compareTo(e2.getName()); } };

En caso de valores enteros

 public static Comparator<Employee> SalaryComparator = new Comparator<Employee>() { @Override public int compare(Employee e1, Employee e2) { return (int) (e1.getSalary() - e2.getSalary()); } };
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!