使用此类:
public class MyClass implements Comparable<MyClass> {
private String status;
private String name;
private String firstName;
@Override
public int compareTo(MyClass o) {
return 0;
}
}
我想按以下顺序对MyClass对象列表进行排序:
如何使用Comparable
界面执行此操作?
答案 0 :(得分:0)
我将这样做:首先定义一组列表,这些列表定义每个字段的顺序:
private static List<String> statusOrder = Arrays.asList("open", "working", "close");
private static List<String> nameOrder = Arrays.asList("toto", "titi");
private static List<String> firstNameOrder = Arrays.asList("tutu", "tata");
然后使用List.indexOf
获取元素在列表中的位置,然后简单地减去结果:
@Override
public int compareTo(MyClass o) {
final int statusComp = statusOrder.indexOf(status) - statusOrder.indexOf(o.status);
if (statusComp != 0) return statusComp;
final int nameComp = nameOrder.indexOf(name) - nameOrder.indexOf(o.name);
if (nameComp != 0) return nameComp;
return firstNameOrder.indexOf(firstName) - firstNameOrder.indexOf(o.firstName);
}
此方法的问题在于,如果元素不在列表中,则indexOf
将返回-1。在MyClass
包含非标准值(也许永远不会发生)的情况下,您需要定义行为。