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);
}
});