2016年5月7日 星期六

android, java的排序方法



一維字串陣列排序

filenameList是一個字串陣列

String[] filenameList = new String[10];

...

//字串陣列排序, 不區分大小寫

Arrays.sort(filenameList, Collator.getInstance());

//字串陣列排序, 區分大小寫
Arrays.sort(filenameList);



對ArrayList內的物件(object)的某個成員變數作排序

//data是一個內含多個SearchResult物件的ArrayList
ArrayList<SearchResult> data = searcher.searchList;

Collections.sort(data, new Comparator<SearchResult>() {
    @Override
    public int compare(SearchResult obj1, SearchResult obj2) {
        String field1 = null;
        String field2 = null;
//id1是自訂的變數, 用以控制選擇不同的排序欄位
        switch (id1) {
            case 0:
//用檔名排序fileName是SearchResult物件內的一個成員變數
field1 = obj1.fileName;
                field2 = obj2.fileName;
                break;
            case 1:
//用路徑+檔名排序
                field1 = obj1.path + obj1.fileName;
                field2 = obj2.path + obj2.fileName;
                break;
            case 2:
//用score(數值先轉成字串)排序
                int val1 = (int) (Float.valueOf(obj1.score) * 10);
                int val2 = (int) (Float.valueOf(obj2.score) * 10);

                field1 = String.format("%4d", val1);
                field2 = String.format("%4d", val2);

                break;
        }

        int a = 0;


//id2是自訂的變數, 控制排序的升降冪
// 由小而大排序,且排序不分大小寫
        if (id2 == 0)
            a = field1.toLowerCase().compareTo(field2.toLowerCase());
        // 由大而小排序
        if (id2 == 1)
            a = field2.toLowerCase().compareTo(field1.toLowerCase());
        return a;
    }
});



對 ArrayList內含字串陣列的第2個欄位排序


//al_setting內放的是字串陣列,

//每個元素內可能含一個以上的字串, 而本例是對字串陣列的第二個元素排序

private ArrayList<String[]> al_setting = new ArrayList<String[]>();


Collections.sort(al_setting, new Comparator<String[]>() {
   public int compare(String[] x1, String[] x2) {

//x1[1],對第二個字串排序, 如果是x1[0],就是對第一個字串排序

//例如{"abc","20"},{"def","30"}, x1[1]是針對20,30去排序,x1[0]是針對"abc","def"去排序

      return x1[1].compareTo(x2[1]);
   }
});




同上,但目標是二維字串陣列(而不是ArrayList內的元素)

String[][] data = ((EngListActivity) getActivity()).searcher.tableData;

                 Arrays.sort(data, new Comparator<String[]>() {
                     @Override
                     public int compare(final String[] entry1,
                           final String[] entry2) {
                        final String time1 = entry1[0];
                        final String time2 = entry2[0];
                        return time1.compareTo(time2);
                     }
                  });



  © Blogger templates Psi by Ourblogtemplates.com 2008

Back to TOP