您的位置:首页 > 其它

Comparator<T> 返回值分析

2015-04-15 16:20 232 查看
这里有两种方式写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)还是按照字典排序(如上),都是可以的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: