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即可。
總結
以上是生活随笔為你收集整理的android list排序,使用Collections.sort()对List/ArrayList进行排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: winxp原版系统iso镜像+大白菜启动
- 下一篇: 如何将PDF转为Word使用?安利3个可