我有一个名为ProviderOfficeData的类。它有很多领域,但我感兴趣的是:
`boolean primary;
String add1;
String add2;
boolean isPrimaryAddress() { return primary; }
String getAddress1() { return add1; }
String getAddress2() { return add2; }`
我想按字母顺序排序,但首先是主要的(只有1个)。我做了以下几种尝试但主要不在顶部。知道排序是否有问题?
`public static class sortPrimaryFirst implements Comparator<ProviderOfficeData> {
@Override
public int compare(ProviderOfficeData cur, ProviderOfficeData nxt) {
if (cur.isPrimaryAddress()) {
return -1;
}
String curAdd = cur.getStreetAddress1() + "|" + cur.getStreetAddress2();
String nxtAdd = nxt.getStreetAddress1() + "|" + nxt.getStreetAddress2();
return curAdd.compareTo(nxtAdd);
}
}`
由于
答案 0 :(得分:0)
由于您不知道排序方法将在Comparator#compare()
中放置参数的顺序,因此您的isPrimaryAddress
检查应包含 :
if (cur.isPrimaryAddress() && !nxt.isPrimaryAddress()) {
return -1;
} else if (!cur.isPrimaryAddress() && nxt.isPrimaryAddress()) {
return 1;
} else {
// compare other fields
}
即使您确切知道,整个集合中只存在一个具有提及属性的实例,但在调用cur
时,此特定实例可以是nxt
以及compare(cur, nxt)
。