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

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