【问题标题】:How to implement a Comparator to compare names?如何实现比较器来比较名称?
【发布时间】:2014-03-10 23:15:46
【问题描述】:

我需要 在我的学生班中实现一个静态方法

public static Comparator<Student> getCompByName()

为学生返回一个新的比较器对象,比较 2 个学生对象 通过属性“名称”。

我创建了我认为正确的东西,但我不确定它是否会像上面给出的要求那样发挥作用。我对比较器非常陌生,并且很难使用它们。

public static Comparator<Student> getCompByName()
{

 Comparator comp = new Comparator<Student>(){
     @Override
     public int compare(Student s1, Student s2)
     {
        return Integer.compare(s1.name.length(), s2.name.length());
     }

 };
 return comp;
}  

仅通过阅读上述要求,我不确定我应该对“名称”进行比较,是否是长度,是否相等等。所以我进行了整数比较。任何人都清楚需要什么以及我是否正确地做到了这一点?如果没有,谁能告诉我我需要做什么/改变?

【问题讨论】:

  • 为什么 Student 没有实现 Comparable?那将是首选方式。
  • @PlasmaPower 如果有不止一种方法可以比较Students.

标签: java comparator anonymous-class anonymous-methods


【解决方案1】:

查看documentation,应该使用compare() 方法来确定两个学生的顺序(在这里,您希望按字母顺序进行)。如果要检查是否相等,可以覆盖Comparatorequals() 方法。对于字符串,您可以只使用现有的方法来比较学生的姓名字段。

public static Comparator<Student> getCompByName()
{

    Comparator comp = new Comparator<Student>(){

        @Override
        public int compare(Student s1, Student s2)
        {
            s1.name.compareTo(s2.name)
        }

    };

    return comp;
}

【讨论】:

    【解决方案2】:

    假设你的'name'属性是一个字符串,你可以直接比较名字,使用

    s1.name.compareTo(s2.name)
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2023-03-29
    • 1970-01-01
    • 2013-09-16
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多