下面是一个示例代码,演示如何按字段对对象列表进行排序,如果字段为null,则按另一个字段排序:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ObjectSortExample {
public static void main(String[] args) {
// 创建对象列表
List objectList = new ArrayList<>();
objectList.add(new MyObject("John", 25));
objectList.add(new MyObject("Alice", null));
objectList.add(new MyObject("Bob", 30));
objectList.add(new MyObject("Kate", 20));
objectList.add(new MyObject("Sam", null));
// 按字段对对象列表进行排序
Collections.sort(objectList, new Comparator() {
@Override
public int compare(MyObject o1, MyObject o2) {
// 如果字段为null,则按另一个字段排序
if (o1.getField() == null && o2.getField() == null) {
return 0;
} else if (o1.getField() == null) {
return 1;
} else if (o2.getField() == null) {
return -1;
} else {
// 根据字段的值进行比较
return o1.getField().compareTo(o2.getField());
}
}
});
// 输出排序后的对象列表
for (MyObject obj : objectList) {
System.out.println(obj.getName() + " - " + obj.getField());
}
}
// 自定义对象
static class MyObject {
private String name;
private Integer field;
public MyObject(String name, Integer field) {
this.name = name;
this.field = field;
}
public String getName() {
return name;
}
public Integer getField() {
return field;
}
}
}
在上面的示例代码中,我们创建了一个包含MyObject
对象的列表。MyObject
类有两个属性:name
和field
。我们使用Collections.sort
方法对objectList
进行排序,传入一个Comparator
对象作为参数。在Comparator
的compare
方法中,我们检查o1
和o2
的field
属性是否为null,如果都为null,则返回0;如果o1
的field
为null,则返回1;如果o2
的field
为null,则返回-1;否则,我们使用field
的compareTo
方法进行比较。
运行上述代码,输出结果如下:
Alice - null
Sam - null
Kate - 20
John - 25
Bob - 30
可以看到,对象列表按照field
字段进行排序,如果字段为null,则按照另一个字段进行排序。在示例中,我们按照field
字段进行排序,如果field
为null,则按照name
字段进行排序。