如你所说,你可以定义两个比较器。
import java.util.Comparator;
public class MyObject {
private final int intProperty;
private final String stringProperty;
public MyObject(int intProperty, String stringProperty) {
this.intProperty = intProperty;
this.stringProperty = stringProperty;
}
public int getIntProperty() {
return intProperty;
}
public String getStringProperty() {
return stringProperty;
}
public static final Comparator<MyObject> intComparator = new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getIntProperty() == o2.getIntProperty() ? 0 : (o1.getIntProperty() < o2.getIntProperty() ? -1 : 1);
}
};
public static final Comparator<MyObject> stringComparator = new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStringProperty().compareTo(o2.getStringProperty());
}
};
};
制作一个可变列表,这是Collections.sort 将接受的唯一输入:
List<MyObject> objects = new ArrayList<>(Arrays.asList(new MyObject(1, "xyz"), new MyObject(2, "abc")));
然后:
Collections.sort(myObjects, MyObject.intComparator); // (1, "xyz"), (2, "abc")
或者:
Collections.sort(myObjects, MyObject.stringComparator); // (2, "abc"), (1, "xyz")
您还可以将这些比较器与其他常见数据结构一起使用:
SortedSet<MyObject> objectSet = new TreeSet<>(MyObject.intComparator);
objectSet.addAll(Arrays.asList(new MyObject(1, "c"), new MyObject(2, "b"));