Android - 通过多个字段比较自定义对象(不同的 object/primitive 类型)

Android - Compare custom object by multiple fields (different object/primitive types)

您如何通过 String 字段和 int 字段比较自定义对象?

例如:

public class person implements Comparable<Person> {

    String name;
    int age;

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

如您所料,这很有效,可以按姓名升序对人员对象进行排序。

我的问题: 我还想按年龄对 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...

首先,检查您的主要属性。如果它们相等,检查次要属性:

@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;
    }
}

您可以重写 compareTo 方法,这样如果两个对象的名称相同,那么您将与年龄进行比较(反之亦然,具体取决于您首先要按什么排序)