有一个像这样的对象:
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
。
感谢您的帮助
答案 0 :(得分:1)
Comparator
&#34;有&#34;如果rhs
是&#34;更多&#34;则返回-1比lhs
,如果它们相等则为0,如果它相等则为1。这样排序实际上是一致的(如果您将rhs
与lhs
进行排序并将lhs
与rhs
进行比较,则必须具有相反的结果,或者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());
}
};