Member 14002893 Ответов: 1

Как мне отсортировать этот объект по идентификатору


У меня есть этот кусок кода. Верен ли мой компаратор?

публичный абстрактный класс Person реализует сопоставимый<person> {
частный интендант;
частный int _phoneNumber;
частная строка _name;
частный список<уведомление> _listNotifications;

@Ручная коррекция
public int compareTo(персона p){
верните this.getId().compareTo(p.getId());
}

Что я уже пробовал:

Я пытался скомпилировать и проверить, работает ли он, но он не работает

1 Ответов

Рейтинг:
0

CPallini

Попробуй

class Person implements Comparable<Person>
{
  private int _id;
  private String _name;

  public int getId(){ return _id;}
  public String getName(){ return _name; }

  Person( int id, String name){ _id = id; _name = name; }

  @Override
  public int compareTo(Person p)
  {
    return Integer.compare(this.getId(), p.getId());
  }


  public static void main( String arg[])
  {
    Person p1 = new Person( 12,  "Boo");
    Person p2 = new Person( 10,  "Foo");

    String is = p1.compareTo(p2) > 0  ? "is" : "is not ";

      System.out.printf("%s %s bigger than %s", p1.getName(), is, p2.getName());
  }
}



[обновление]
Следуя любезной просьбе...
import java.util.*;

class Person implements Comparable<Person>
{
  private int _id;
  private String _name;

  public int getId(){ return _id;}
  public String getName(){ return _name; }

  Person( int id, String name){ _id = id; _name = name; }

  @Override
  public int compareTo(Person p)
  {
    return Integer.compare(this.getId(), p.getId());
  }


  public static void main( String arg[])
  {
    Person p1 = new Person( 12,  "Boo");
    Person p2 = new Person( 10,  "Foo");

    ArrayList <Person> alp=new ArrayList<Person>();
    alp.add(p1);
    alp.add(p2);

    Collections.sort(alp);

    for ( Person p : alp)
      System.out.printf("%s\n", p.getName());

    Collections.sort( alp, new NameComparator() );

    for ( Person p : alp)
      System.out.printf("%s\n", p.getName());
  }
}

class NameComparator  implements Comparator<Person>
{
 @Override
    public int compare(Person p1, Person p2) {
        return p1.getName().compareTo(p2.getName());
    }
}
[/обновление]


Member 14002893

О, спасибо!! Что делать, если мне придется сравнивать по 2-м направлениям. Один из способов, показанных выше(по ID) и нужен новый метод compareto (сравнивая по названию), чтобы я мог сделать коллекции.сортировка(List_Persons,Заименем) и коллекций.сортировка(List_Persons,по ID)

CPallini

Смотрите обновление в моем решении.

Member 14002893

этот класс выполняется в другом файле или может быть выполнен в том же классе, что и человек??

CPallini

Вы можете записать его в тот же файл, конечно. Вы также можете использовать анонимный класс или лямбду, см.
https://stackoverflow.com/questions/22637900/java8-lambdas-vs-anonymous-classes

Member 14002893

и также, когда я делаю коллекции.сортировать(список,компаратор) в другой класс мне нужно Новый писать коллекций.сортировать(список,новый компаратор());?? спасибо..

Member 14002893

в чем разница между ними :

класс NameComparator реализует компаратор<person>{
и
публичный статический компаратор<fruit> FruitNameComparator
= новый компаратор<фрукты>(){
спасибо..