Comparator<T> 返回值分析

这里有两种方式写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)还是按照字典排序(如上),都是可以的。




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值