对列表中的各个字段进行排序

时间:2015-05-06 21:17:31

标签: java sorting

我有一个名为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);
        }
}`

由于

1 个答案:

答案 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)