Почему сопоставимый не работает на съемочной площадке? - PullRequest
0 голосов
/ 04 июня 2018

Вот мои файлы

User.java

public class User implements Comparable<User> {

private String name;
private int age;

public User(String name, int age) {
    super();
    this.name = name;
    this.age = age;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}

@Override
public String toString() {
    return "User [name=" + name + ", age=" + age + "]";
}
/**
 * Sorting by name
 */
@Override
public int compareTo(User user) {
    return this.name.compareTo(user.name);
}
}

Test.java

public class Test {
public static void main(String[] args) {

    User u1=new User("Shanaya", 22);
    User u2=new User("Jhon", 27);
    User u3=new User("Arya", 20);

    Set<User> set=new HashSet<>();
    set.add(u1);
    set.add(u2);
    set.add(u3);

    System.out.println(set);  //by name sorting not working here
}

Переопределить compareTo () здесь для сравнения объектов "только по именам". Все еще выходные данные программы сравниваются "по возрасту"

Вывод: [Пользователь [имя = Арья, возраст = 20], Пользователь [имя =Шанайа, возраст = 22], пользователь [имя = Джон, возраст = 27]]

1 Ответ

0 голосов
/ 04 июня 2018

Проблема в том, что HashSet не является упорядоченным набором в Java, и он не будет использовать вашу реализацию интерфейса Comparable.Попробуйте вместо этого использовать упорядоченный набор, например TreeSet:

User u1 = new User("Shanaya", 22);
User u2 = new User("Jhon", 27);
User u3 = new User("Arya", 20);

Set<User> set = new TreeSet<>();
set.add(u1);
set.add(u2);
set.add(u3);

for (User user : set) {
    System.out.println(user);
}
...