android list排序,使用Collections.sort()对List/ArrayList进行排序

今天写Android应用,遇到一个对List进行排序的问题,经过google的提示,发现用Collections.sort(List list, Comparator c) 就可以对List/ArrayList进行排序,很Happy的去写代码做测试,结果发现排序没有起作用,检查之,发现代码没什么问题啊(代码如下),奇怪了。

publicvoidchangeSort(inttype){

Comparator comparator;

Toast.makeText(this,"type=="+type,5).show();

switch(type){

case1:{

// 价格从低到高排序

comparator = newPriceLowToHighComparator();

Collections.sort(list, comparator);

}

break;

case2:{

// 价格从高到低排序

comparator = newPriceHighToLowComparator();

Collections.sort(list, comparator);

}

break;

}

adapter.setItemBeanList(list);

adapter.notifyDataSetChanged();

}

publicclassPriceHighToLowComparatorimplementsComparator {

@Override

publicintcompare(ItemBean itemBean1, ItemBean itemBean2) {

doubleprice1 =0;

doubleprice2 =0;

if(itemBean1.getItemPrice() !=null&& !"".equals(itemBean1.getItemPrice())){

price1 = Double.parseDouble(itemBean1.getItemPrice());

}

if(itemBean2.getItemPrice() !=null&& !"".equals(itemBean2.getItemPrice())){

price2 = Double.parseDouble(itemBean2.getItemPrice());

}

if(price1 > price2){

return-1;

}

elseif(price1 

return1;

}

else{

return0;

}

}

}

然后就是各种改返回值,反复改了三次以后发现问题所在,返回值不正确,上面的这个类是list的价格从高到低的规则类,Collections.sort(List list, Comparator c) 会根据返回值来对list中的数据进行排序,最初如果price1>price2,则return 1,但是试验发现list中的数据无变化,随后改成return -1,试验发现list中的数据能按照预想的效果排序了,可是新的问题出来了,为什么price1>price2,但是要返回-1呢?

继续google之,发现http://solodu.iteye.com/blog/630891 这篇文章的主人在文章结尾说了一段话“要充分理解排序就必须先理解最后的return 0, -1 , 1  这三个数字代表的含义。它们不是代表数字而是代表前面和后面要比较的值哪个大哪个小?如果是0表示要比较的这两个数字相等。如果是1表示前面数字大,如果-1表示前面数字小。要理解这个就没问题了。”但是结合我自己写的这个排序规则,我突然觉得0,1,-1这三个数好像不是说谁大谁小,而是一个排序的问题,当返回-1时,前面的变量(即price1)排在后面的变量(price2)的前面,反之则排在后面。果真如此么,正好就着这次的项目的排序要求比较多,也就多写几个规则测试一下,结果确实如此,根据不同规则,如果想将前面的变量放到后面的变量之前,则返回-1即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值