Java List 实现排序的简单方法
博客专区 > SuShine 的博客 > 博客详情
Java List 实现排序的简单方法
SuShine 发表于2年前
Java List 实现排序的简单方法
  • 发表于 2年前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

private void sortDatas()
  {
    Collections.sort(mAllprogramdata, new Comparator<PairProgram>()
    {
      public int compare(PairProgram arg0, PairProgram arg1)
      {
        if (arg0.fav > arg1.fav)
        {
          return -1;
        } else if (arg0.fav == arg1.fav)
        {
          return 0;
        } else
        {
          return 1;
        }
      }
    });
  }






  
  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即可。

共有 人打赏支持
粉丝 118
博文 312
码字总数 79453
×
SuShine
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: