隨便定義一個集合
String[] str = new String[]{
"1", "9", "5", "6", "1", "4", "4","1", "9", "5", "6", "1", "4", "4",
};
然後使用:
Collections.sort (list, new Comparator<String> () {
@Override
public int compare(String o1, String o2) {
int a1 = Integer.parseInt (o1);
int a2 = Integer.parseInt (o2);
if (a1 > a2) {
return 1;
} else if (a1 == a2) {
return 0;
}
return -1;
}
});
for (String s:list){
Log.d (TAG, "sort: --->" + s);
}
打印的log 升序
只要看下Comparator 接口,我們使用的集合的泛型 是一個 string 類型,所以 Comparator 的泛型類型會自動獲取list 的泛型類型
然後重寫了compare 方法
public int compare(String o1, String o2)
這裏的 String o1, String o2 分別代表了集合中的上一條數據和下一條數據,我這裏是根據數的大小進行排序的,
1.如果o1 比 o2 大 返回1 我這裏這裏是按照增序排列的, 這時他會將數據 o1和o2 調換位置,類似於我們自己寫了一個排序一樣,不過使用這個函數,他幫助我們做了這些工作,我們只要告訴他,排序的策略是什麼就可以了.
2. o1相等 o2 返回 0 即不動
3. o1 比 o2 小 返回 -1 ,實際上是將o1 移動到o2前
知道了這些後我們可以根據業務來修改返回值,上邊是增序,我們很容易就可以改爲降序
Collections.sort (list, new Comparator<String> () {
@Override
public int compare(String o1, String o2) {
int a1 = Integer.parseInt (o1);
int a2 = Integer.parseInt (o2);
if (a1 > a2) {
return -1;
} else if (a1 == a2) {
return 0;
}
return 1;
}
});
for (String s:list){
Log.d (TAG, "sort: --->" + s);
}
降序:
到這裏基本就完了,但是正常開發中不可能這麼簡單,我們集合中放入的都是一些數據模型,比如說
public class FileBean {
private String picId;
private String fileName;
private String filePath;
private long size;
}
我想根據size 文件大小排序,
List<FileBean> fileBeans =new ArrayList<> ();
Collections.sort (fileBeans, new Comparator<FileBean> () {
@Override
public int compare(FileBean o1, FileBean o2) {
Long size1=o1.size;
Long size2=o2.size;
if (size1 > size2) {
return 1;
} else if (size1 == size2) {
return 0;
}
return -1;
}
});
這樣 我們的集合就是一個按照size 大小排序的集合了.