首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到适合Collections.sort()的方法

找不到适合Collections.sort()的方法
EN

Stack Overflow用户
提问于 2019-10-30 13:10:45
回答 2查看 859关注 0票数 1

我正在学习Java的一些例子,但我似乎不能使用Collections.sort对我的列表进行排序。目前,我的代码如下:

代码语言:javascript
复制
// 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 ...

}
代码语言:javascript
复制
// 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;
    }
} 

输出如下:

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

我怀疑的是Person类的toCompare可能是问题所在,因为它正在比较字符串...然而,我在网上查找了一下,似乎用.compareTo方法比较两个不同的字符串是有效的。我尝试将ArrayList转换为List,但仍然有相同的错误。我没有想法,所以我不想如果任何人有任何建议来解决这个问题。提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-30 13:25:48

您可以从Comparable扩展Identifiable接口

代码语言:javascript
复制
public interface Identifiable extends Comparable<Identifiable> {
    String getID();  
}

现在,您不需要在Person类中实现可比较类,并且Collections.sort()现在应该可以工作了

票数 2
EN

Stack Overflow用户

发布于 2021-04-11 11:51:58

您只需在第一个java文件中添加一行:

代码语言:javascript
复制
import java.lang.*

我遇到了和你一样的错误,我通过上面提到的解决方案解决了它。我认为发生这种情况的原因是编译器无法识别cumtomer compareTo函数。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58619111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档