在android中对自定义对象的arraylist进行排序

时间:2014-04-01 06:15:05

标签: java android arraylist

有一个像这样的对象:

dataObj
=============
name
address
isTopPriority

所以我有一个dataObj的arrayList,如何将dataObj排序为"如果isTopPriority为true,那么它们将是数组的前端部分" ?感谢

尝试使用以下代码:

private class CustomComparator implements Comparator<Spot> {
        @Override
        public int compare(Spot lhs, Spot rhs) {
            // TODO Auto-generated method stub
            return lhs.isStar.compareTo();
        }
    }

但是我很困惑为什么要比较2个对象,我想像这样comapre:

只是if (currentObj.isFirstPriority == true) then return the object

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

Comparator&#34;有&#34;如果rhs是&#34;更多&#34;则返回-1比lhs,如果它们相等则为0,如果它相等则为1。这样排序实际上是一致的(如果您将rhslhs进行排序并将lhsrhs进行比较,则必须具有相反的结果,或者0) 。以下Comparator执行此操作:

private class CustomComparator implements Comparator<Spot> {
    @Override
    public int compare(Spot lhs, Spot rhs) {
        if (lhs.isStar == rhs.isStar) return 0;
        else if (lhs.isStar) return 1;
        return -1;
    }
}

你还必须对它进行实际排序,但我猜你知道如何做到这一点(Collections.sort(arrayList, comparator))。

答案 1 :(得分:1)

这将按优先级排序主要,按名称排序。

private static final Comparator<Data> dataComparator = new Comparator<Data>() {
    @Override
    public int compare(Data o1, Data o2) {
        if (o1.isTopPriority() && o2.isTopPriority())
            return o1.getName().compareTo(o2.getName());
        if (o1.isTopPriority())
            return 1;
        if (o2.isTopPriority())
            return -1;
        return o1.getName().compareTo(o2.getName());
    }
};