要按照对象字段对ArrayList的列表进行排序,仅当字段存在时进行排序,可以使用Java的Comparator接口来实现。
下面是一个示例代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
ArrayList studentList = new ArrayList<>();
studentList.add(new Student("John", 20));
studentList.add(new Student("Alice", 18));
studentList.add(new Student("Bob", 22));
studentList.add(new Student("Tom", 19));
// 按照年龄字段对列表进行排序,仅当字段存在时进行排序
Collections.sort(studentList, new Comparator() {
@Override
public int compare(Student s1, Student s2) {
if (s1.getAge() != s2.getAge()) {
return Integer.compare(s1.getAge(), s2.getAge());
}
return 0;
}
});
// 打印排序后的列表
for (Student student : studentList) {
System.out.println(student.getName() + " - " + student.getAge());
}
}
}
在上面的示例中,我们创建了一个Student类,包含name和age字段。我们使用ArrayList存储Student对象,并在列表中添加了一些示例数据。
然后,我们使用Collections.sort()方法对studentList进行排序。在排序过程中,我们使用匿名内部类实现了Comparator接口,并重写了compare()方法。在compare()方法中,我们首先检查两个学生对象的年龄字段是否相等,如果不相等则按照年龄的升序对学生对象进行排序。
最后,我们遍历排序后的列表,并打印每个学生对象的名称和年龄。输出结果将按照年龄的升序排列,仅当年龄字段存在时进行排序。