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 方法,这样如果两个对象的名称相同,那么您将与年龄进行比较(反之亦然,具体取决于您首先要按什么排序)
您如何通过 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 方法,这样如果两个对象的名称相同,那么您将与年龄进行比较(反之亦然,具体取决于您首先要按什么排序)