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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值