List中的排序sort()方法與Collection.sort(List)方法

今天寫到關於list更具一套規則重新排序的問題。具體需求是有一個List對象,元素是Media類型,Media類有一個mediaName屬性,還有一個List<String>,存儲一組文件名,現在要求Media的list更具文件名排序,要求文件名的順序和List<String>存儲的一致。

Media類:

public class Media implements Serializable {
	private static final long serialVersionUID = 1L;
    private String mediaId;
    private String mediaName;
    private String mediaSize;
    private String objectType;
    private String objectId;
    private String mediaType;
    //getter,setter
}

這種排序當然可以通過新建一個List對象,然後遍歷List<String>文件名的方式,進行排序的操作,但是未免有些繁瑣。java爲我們提供了排序的方式。

在JDK1.7中一般使用工具類Collections(注意區分集合幾口Collection),來對集合進行排序,集合中的對象類必須實現Comparable接口的compare方法,用於比較兩個對象大小,但是這種方法只能通過比較內部的屬性的大小來進行邏輯上的判斷,通常Integer等裝箱類和String都實現了compare方法。以Integer的爲例:

public static int compare(int x, int y) {    
        return (x < y) ? -1 : ((x == y) ? 0 : 1);//x>y返回1,等於返回0,小於返回-1
    }

還有一種方式可以將排序規則作爲入參放在Collections.sort方法中,這樣可以引入對象外的其他參數。

Collections.sort(medias, new Comparator<MediaPojo>() {
                            public int compare(MediaPojo o1, MediaPojo o2){
                                Integer i1 = order.indexOf(o1.getMediaName()); //order表示文件名列表,在方法體外引入
                                Integer i2 = order.indexOf(o2.getMediaName());
                                return i2.compareTo(i2);
                            }
                        });

但是在JDK1.8中List增加了sort方法,入參爲排序規則,實現也很簡單

medias.sort(new Comparator<MediaPojo>() {
                            public int compare(MediaPojo o1, MediaPojo o2){
                                Integer i1 = order.indexOf(o1.getMediaName());
                                Integer i2 = order.indexOf(o2.getMediaName());
                                return i2.compareTo(i2);
                            }
                        });




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章