Не найдено подходящего метода для Collections.sort () - PullRequest
1 голос
/ 30 октября 2019

Я работаю над некоторыми примерами для изучения Java, и мне кажется, что я не могу использовать Collections.sort для сортировки своего списка. В настоящее время мои коды следующие:

// Person class in package application.domain

package application.domain;

public class Person implements Identifiable, Comparable<Identifiable> {
    private String name;
    private String id;

    // ...Constructor...

    // ...Accessors for getName and getPersonID...

    @Override // from interface "Identifiable"
    public String getID(){
        return getPersonID();
    }

    public int compareTo(Identifiable another) {
        return this.getID().compareTo(another.getID()); 
    }

    //... toString ...

}

// Register class implementation

package application.domain; 
import java.util.*;

public class Register {
    private HashMap<String, Identifiable> registered;

    // ...Constructor - initialize hashmap ...

    public void add(Identifiable toBeAdded){
        this.registered.put(toBeAdded.getID(), toBeAdded);
    }

    // get
    public Identifiable get(String id){ return this.registered.get(id); }

    // getAll - must be generalized to work
    public List<Identifiable> getAll(){
        return new ArrayList<Identifiable>(registered.values());
    }

    // sortAndGetEverything (ERROR)
    public List<Identifiable> sortAndGetEverything(){
        List<Identifiable> all = new ArrayList<Identifiable>(registered.values());
        Collections.sort(all); // <- part of code that gives an error
        return all;
    }
} 

со следующим выводом:

enter image description here

* Обратите внимание, что комментарии с эллипсамииспользуются для сокращения нерелевантных частей

Я подозреваю, что у класса Person toCompare может быть проблема, поскольку он сравнивает строку ... однако я посмотрел его в Интернете, и кажется, что сравнение двух разныхстроки действительны с .compareTo методом. Я попытался преобразовать ArrayList в список и все еще с той же ошибкой. Я не в курсе, поэтому я не хотел бы, если у кого-нибудь есть предложения по исправлению этого. Заранее спасибо.

1 Ответ

2 голосов
/ 30 октября 2019

Вы можете расширить Identifiable интерфейс с Comparable:

public interface Identifiable extends Comparable<Identifiable> {
    String getID();  
}

Теперь вам не нужно реализовывать Comparable в классе Person, и Collections.sort () теперь должен работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...