Collections.sort 实现对集合的排序

 随便定义一个集合

 

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 大小排序的集合了.

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