随便定义一个集合
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 大小排序的集合了.