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)还是按照字典排序(如上),都是可以的。
相关文章推荐
- <<出现问题的自绘组合框>>的分析和修正
- 接口List<E>常用实现类分析
- 3D打印机切片引擎Cura分析<一>
- Hadoop中shuffle阶段流程分析 &lt;转&gt;
- <OJ_Sicily>1214信号分析
- Comparator<T> explaination
- <算法设计技巧与分析>M.H>Alsuwaiye编著 读书心得
- 关于<<和>>重载操作符 返回值的问题
- 方法重载(overload)的例子分析(摘自<深入理解Java虚拟机>)
- hadoop的原生比较器RawComparator<T> public WritableCom...
- <android里图片下载工具类AsyncImageLoader分析> 后续:优化
- Android中Input型输入设备驱动原理分析<一>
- <stl>list::sort源码分析
- NS2 分裂机制及代码分析<一>
- 3D打印机切片引擎CuraEngine源码分析<四> CuraEngine中的ReadMe解读,CuraEngine的版本介绍
- platform s3c2440_led 驱动代码简要分析<1>
- Java笔记3 多线程<2>线程间通信-代码分析以及多线程常见方法的运用
- <数据结构与算法分析 C++描述>算法分析之最大子序列和问题
- 本书已出版<拨云见日:基于android的内核与系统架构源代码分析 >
- <机器学习系统设计>第十章(上)----代码与错误分析