2014-04-01 75 views
0

自定義對象的ArrayList有這樣一個對象:排序android系統

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

所以我有dataObj的ArrayList,如何將dataObj排序,「如果isTopPriority是真實的,那麼他們將是陣列的前端部分「?由於

嘗試的代碼,如:

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

感謝您的幫助

+1

可能重複(http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property) –

回答

1

一個Comparator「已經」返回-1,如果rhslhs,0,如果他們是平等的「更多」和1如果是少。這是這樣的排序實際上是一致的(如果你排序rhs比較lhslhs比較它與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))。

+0

的問題是,它似乎排序是相反的,這意味着明星項目是較低prioirty – user782104

+0

好吧,我得到它感謝 – user782104

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()); 
    } 
}; 
[由屬性定義對象的排序的ArrayList]的