小东Freeman + 关注

签名:我们爱我们的倒霉工作,也爱这千疮百孔的世界。

Java对LIst中的某一属性进行排序

发表于 1个月前   207次查看    0评论  3 赞

前言

在java开发中,经常要对数据进行排序,当然大部分的排序都可以在数据库中进行操作,但是要想对一些混合的数据进行排序则需要在java中进行排序,所以我们接下来就说说对LIst<Bean>中的某一属性进行排序。


示例

List<Shop> shops=new ArrayList<>();
Shop shop;
shop=new Shop();
shop.setOrder(2);
shop.setShopName("asd");
shops.add(shop);
shop=new Shop();
shop.setOrder(1);
shop.setShopName("qwe");
shops.add(shop);
shop=new Shop();
shop.setOrder(3);
shop.setShopName("zxc");
shops.add(shop);

这里有个含有shop实体类的list,然后我们要对order这个字段进行排序。


具体实现

对于Java中一个已经存在的List<Bean>来说,要给他排序,传统上有两种方式:一个是Bean要实现Comparable接口,另一个是创建Comparator子类。


第一种方式需要在原有的Bean上扩展Comparable接口,一般使用不多,因为最好不要随意更改JavaBean。


第二种方式则是独立于原有JavaBean,实现的方法需要传入两个Bean对象。


所以这里着重实现第二种方式,因为传统的方法一个需要扩展原有Bean,另一个需要新建一个Java类,这样的工作方式看起来笨重,操作起来也不方便。如果要对10个不同类型List集合排序,它就需要扩展10个Bean,或者新建10个类。


代码

public static void main(String[] args) {
   List<Shop> shops=new ArrayList<>();
   Shop shop;
   shop=new Shop();
   shop.setOrder(2);
   shop.setShopName("asd");
   shops.add(shop);
       shop=new Shop();
   shop.setOrder(1);
   shop.setShopName("qwe");
   shops.add(shop);
       shop=new Shop();
   shop.setOrder(3);
   shop.setShopName("zxc");
   shops.add(shop);
   //进行排序
   boolean flag=true;
   Comparator mycmp = ComparableComparator.getInstance();
   mycmp = ComparatorUtils.nullLowComparator(mycmp);  //允许null,会把null值放到最后
   if(flag){
   mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序,这里调用这个reversedComparator就是逆序,不调用就是正序
   }
   Comparator cmp = new BeanComparator("grade", mycmp);
   Collections.sort(shops, cmp);


   for (int i = 0; i < shops.size(); i++) {
      System.out.println(shops.get(i).getGrade());
      System.out.println(shops.get(i).getShopName());
   }
}

这里主要用的就是ComparatorUtils中的方法,具体实现可以google一下


结果

1
qwe
2
asd
3
zxc


3人已赞


本文由Fun言网 – 小东Freeman创作,转载请务必附上本文链接和出处,欢迎参与我们的付费投稿计划


你还没有登录,请先 登录注册!
文章评论0