對java.util.List多欄位排序

來源:互聯網
上載者:User

    對於一般的List的排序可以使用java.util.Collections.sort(List<T>, Comparator<? super T>)這樣簡單易用的方法。但是經常看到有人在問如何對元素的多欄位排序。這個問題就像SQL語句裏面的‘Order By’語句,後面可以跟若干個排序條件。

譬如對於元素Foo排序:

class Foo{

    int a;

    int b;

}

Foo.a是第一排序欄位,Foo.b是第二排序欄位,也就是在Foo.a相等的2個Foo的情況下判斷Foo.b。那麽我們的Comparator可以這樣寫:

Collections.sort(l, new Comparator<Foo>(){<br /> @Override<br /> public int compare(Foo f1, Foo f2) {<br /> if(f1.a-f2.a>0){<br /> return 1;<br /> }else if (f1.a-f2.a<0){<br /> return -1;<br /> }else{//Foo.a equal, then check Foo.b<br /> return f1.b-f2.b;<br /> }<br />}});

 

或者可以用一個比較通用的方法:

/**<br /> * Sort <code>List</code> by multiple conditions.<br><br /> * It's like SQL 'Order by' clause. Input multiple <code>Comparator</code><br /> * in List as argument.<br /> *<br /> * @param <T><br /> * @param list<br /> * @param comparatorList<br /> * @throws IllegalArgumentException if comparatorList is empty<br /> * @author shengyuan.lu 盧聲遠<michaellufhl@yahoo.com.cn><br /> */<br />public static <T> void sort(List<T> list, final List<Comparator<T>> comparatorList) {<br /> if (comparatorList.isEmpty()) {//Always equals, if no Comparator.<br /> throw new IllegalArgumentException("comparatorList is empty.");<br /> }<br /> Comparator<T> comparator = new Comparator<T>() {<br /> public int compare(T o1, T o2) {<br /> for (Comparator<T> c:comparatorList) {<br /> if (c.compare(o1, o2) > 0) {<br /> return 1;<br /> } else if (c.compare(o1, o2) < 0) {<br /> return -1;<br /> }<br /> }<br /> return 0;<br /> }<br /> };<br /> Collections.sort(list, comparator);<br /> }

最個方法就是把每個排序Comparator組合成一個Comparator,然後排序。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.