这里有两种方式写Comparator的方式
第一种:
Collections.sort(mOldFileInfos, new Comparator<FileItem>() {
// 正数代表第二个数大于第一个数
@Override
public int compare(FileItem lhs, FileItem rhs) {
int fileType = rhs.isFileType - lhs.isFileType;
if (fileType == 0) {
if( rhs.getId() - lhs.getId()!=0)
{
return rhs.getId() - lhs.getId();
}
return lhs.getName().compareToIgnoreCase(rhs.getName());
}
return fileType;
}
});
第二种:
Collections.sort(mOldFileInfos, new Comparator<FileItem>() {
// 正数代表第二个数大于第一个数
@Override
public int compare(FileItem lhs, FileItem rhs) {
if (lhs.getId() != 0) {
return -1;
}
if (rhs.getId() != 0) {
return 1;
}
// 如果兩個都是文檔或文件夾的話,則比較否則,直接返回
if (lhs.isFileType == rhs.isFileType) {
// 如果是Iworker,那么排在第一位
return (lhs.getName().compareToIgnoreCase(rhs
.getName()));
} else {
// 如果一個文檔一個文件夾則返回文件夾大
return rhs.isFileType == FileItem.FILE_TYPE_FLODER ? 1
: -1;
}
}
});
效果是一样的,只觉得第一种的思维很强,我一开始想到的也就是第二种方式而已。
分析:返回值分为负数正数和0
负数代表左值小于右值,排在上面
正数代表左值大于右值,排在下面
0代表左值等于右值,排在上面
可以这样理解:排序就是比较谁大谁小,将小的放在前面,大的放在后面。例如当返回负数的时候,表明第一个数应该排在第二个数的上面。
可以按照你想要的规则进行排序,不论是按照集合中的正序(返回值1),还是集合中的倒序(返回值-1)还是按照字典排序(如上),都是可以的。