没有找到适合 Collections.sort() 的方法

我正在通过一些示例来学习 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;

    }

https://img1.sycdn.imooc.com/6597ef49000170fc06010244.jpg

*请注意,带有省略号的注释用于缩写不相关的部分

我怀疑的是 Person 类toCompare可能是问题,因为它正在比较字符串...但是,我在网上查找了它,似乎比较两个不同的字符串对于.compareTo方法是有效的。我尝试将 ArrayList 转换为 List,但仍然出现相同的错误。我不知道,所以如果有人对解决这个问题有任何建议,我不想这样做。先感谢您。


慕尼黑5688855
浏览 177回答 2
2回答

aluckdog

您可以Identifiable从以下位置扩展接口Comparable:public&nbsp;interface&nbsp;Identifiable&nbsp;extends&nbsp;Comparable<Identifiable>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getID();&nbsp;&nbsp; }现在您也不需要在类中实现 Comparable&nbsp;Person,并且 Collections.sort() 现在应该可以工作

catspeake

您只需在第一个 java 文件中添加一行:import&nbsp;java.lang.*我遇到了和你一样的错误,我通过上面提到的解决方案解决了它。我认为发生这种情况的原因是编译器无法识别客户的compareTo函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java