使用Collections.sort()對List/ArrayList進行排序

  今天寫Android應用,遇到一個對List進行排序的問題,經過google的提示,發現用Collections.sort(List list, Comparator c) 就可以對List/ArrayList進行排序,很Happy的去寫代碼做測試,結果發現排序沒有起作用,檢查之,發現代碼沒什麼問題啊(代碼如下),奇怪了。

  1. public void changeSort(int type){ 
  2.      
  3.     Comparator<ItemBean> comparator; 
  4.     Toast.makeText(this"type=="+type, 5).show(); 
  5.     switch(type){ 
  6.         case 1:{ 
  7.             // 價格從低到高排序 
  8.             comparator = new PriceLowToHighComparator(); 
  9.             Collections.sort(list, comparator); 
  10.         } 
  11.         break
  12.         case 2:{ 
  13.             // 價格從高到低排序 
  14.             comparator = new PriceHighToLowComparator(); 
  15.             Collections.sort(list, comparator); 
  16.         } 
  17.         break
  18.     } 
  19.      
  20.     adapter.setItemBeanList(list); 
  21.     adapter.notifyDataSetChanged(); 

  1. public class PriceHighToLowComparator implements Comparator<ItemBean> { 
  2.  
  3.     @Override 
  4.     public int compare(ItemBean itemBean1, ItemBean itemBean2) { 
  5.          
  6.         double price1 = 0
  7.         double price2 = 0
  8.          
  9.         if(itemBean1.getItemPrice() != null && !"".equals(itemBean1.getItemPrice())){ 
  10.             price1 = Double.parseDouble(itemBean1.getItemPrice()); 
  11.         } 
  12.          
  13.         if(itemBean2.getItemPrice() != null && !"".equals(itemBean2.getItemPrice())){ 
  14.             price2 = Double.parseDouble(itemBean2.getItemPrice()); 
  15.         } 
  16.          
  17.         if(price1 > price2){ 
  18.             return -1
  19.         } 
  20.         else if(price1 < price2){ 
  21.             return 1
  22.         } 
  23.         else
  24.             return 0
  25.         } 
  26.     } 
  27.  

  然後就是各種改返回值,反覆改了三次以後發現問題所在,返回值不正確,上面的這個類是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即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章