2017-02-17 108 views
0

我的目錄安卓排序的ArrayList

ArrayList<MyList> list = new ArrayList<MyList>(); 
//  name - order - info 
list.add("Book ...", "1", "blah blah); 
list.add("Book ...", "10", "blah blah); 
list.add("Book ...", "11", "blah blah); 
list.add("Book ...", "2", "blah blah); 

我想對列表進行排序,根據其在2秒鐘的位置OBJ

然後我試圖

Collections.sort(list); 

名單Calss

public class MyList implements Comparable<MyList> { 

... 

    @Override 
    public int compareTo(@NonNull MyList content) { 
     return Integer.parseInt(content.getOrder()); 
    } 
} 

回答

1

你這裏需要一個Comparator

那一個比較兩個項目,並返回-1,0或1;如果第一個條目比第二個條目更小,等於,更大。

但是你應該更進一步:它似乎是你嘗試模擬某些數據 - 然後不使用平板 MyList列表類。創建一個真正的模型您的數據;可能是BookRecord;有String nameint id等字段。

3

您可以將Comparator對象傳遞給sort方法。

Collections.sort(list, new Comparator<MyList>() { 
    @Override 
    public int compare(MyList m1, MyList m2) { 
     return m1.getOrder() - m2.getOrder(); 
    } 
}); 

如果您使用的是Java 8,你可以做到這一點。

Collections.sort(list, (MyList m1, MyList m2) -> 
            m1.getOrder() - m2.getOrder())); 
+1

不錯!這樣你可以在不同的環境下做不同的比較!甜! –

1

讓你compareTo方法是這樣的:

public int compareTo(MyList o) { 
     return this.getOrder() - o.getOrder(); 
    } 
2
ArrayList<MyList> list = new ArrayList<MyList>(); 
    //  name - order - info 
    list.add("Book ...", "1", "blah blah); 
    list.add("Book ...", "10", "blah blah); 
    list.add("Book ...", "11", "blah blah); 
    list.add("Book ...", "2", "blah blah); 

    Collections.sort(list, new Comparator<MyList>() { 
     @Override 
     public int compare(MyList m1, MyList m2) { 
      return m1.getOrder() - m2.getOrder(); 
     } 
    }); 

現在檢查你的列表是按升序排列。