有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android通过多个字段比较自定义对象(不同的对象/基本类型)

如何通过字符串字段和int字段比较自定义对象

例如:

public class person implements Comparable<Person> {

    String name;
    int age;

    @Override
    public int compareTo(@NonNull Person another) {
        return name.compareToIgnoreCase(another.name);
    }
}

正如您所期望的,这很好地工作,并按名称升序对person对象进行排序

我的问题是: 我还想按年龄对Person对象列表进行排序

排序后,列表应如下所示:

name = a, age = 18
name = b, age = 18
name = c, age = 18
name = a, age = 20
name = b, age = 20
name = c, age = 20
...and so on...

共 (2) 个答案

  1. # 1 楼答案

    首先,检查您的主要属性。如果这些属性相等,请检查辅助属性:

    @Override
    public int compareTo(@NonNull Person another) {
        int result = Integer.compare(age, another.age);
        if (result == 0) {
            result = name.compareToIgnoreCase(another.name);
        }
        return result;
    }
    

    对于1.7版之前的Java版本–手动方式:

    @Override
    public int compareTo(@NonNull Person another) {
        if (age == another.age) {
            return name.compareToIgnoreCase(another.name);
        } else if (age < another.age) {
            return -1;
        } else {
            return 1;
        }
    }
    
  2. # 2 楼答案

    您可以重写compareTo方法,这样,如果两个对象的名称相等,则可以与年龄进行比较(反之亦然,具体取决于您希望首先对其排序的对象)