zoukankan      html  css  js  c++  java
  • 如何对List集合中的对象进行按某个属性排序

    我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序

    当list集合中的元素类型是我们自定义类型时,有两种对list中的元素进行排序的方法:

    方法一

      让list集合中的元素类型,也就是我们自定义的类实现Comparable<T>接口,并在类中编写public int compareTo(T o)方法。如下所示:

     1 public class Test 
     2 {
     3     public static void main(String[] args) 
     4     {
     5         ArrayList<Entity> list=new ArrayList<Entity>();
     6         list.add(new Entity("李四",24));
     7         list.add(new Entity("张三",13));
     8         list.add(new Entity("王五",25));
     9         System.out.println("排序前:"+list);
    10         Collections.sort(list);
    11         System.out.println("排序后:"+list);
    12     }
    13 }
    14 class Entity implements Comparable<Entity>
    15 {
    16     String name;
    17     int age;
    18     public Entity(String name, int age) {
    19         super();
    20         this.name = name;
    21         this.age = age;
    22     }
    23     public String getName() {
    24         return name;
    25     }
    26     public void setName(String name) {
    27         this.name = name;
    28     }
    29     public int getAge() {
    30         return age;
    31     }
    32     public void setAge(int age) {
    33         this.age = age;
    34     }
    35     @Override
    36     public String toString() {
    37         return "Entity [name=" + name + ", age=" + age + "]";
    38     }
    39     @Override
    40     public int compareTo(Entity o) 
    41     {
    42         if(this.getAge()>o.getAge())
    43         {
    44             return 1;
    45         }
    46         else if(this.getAge()<o.getAge())
    47         {
    48             return -1;
    49         }
    50         else
    51         {
    52             return 0;
    53         }
    54     }
    55 }

      我们想对Entity这个类型按照age属性值从小到大排序,则方法一是让Entity这个类实现Comparable<Entity>接口,并编写public int compareTo(Entity o) 方法。这样使用Collections.sort(list);就可以对list中的对象进行按照age大小排序。

    输出结果:

    排序前:[Entity [name=李四, age=24], Entity [name=张三, age=13], Entity [name=王五, age=25]]
    排序后:[Entity [name=张三, age=13], Entity [name=李四, age=24], Entity [name=王五, age=25]]

    方法二

      方法二就是在排序的时候,给sort()方法传入一个比较器。具体来说,就是传入一个实现比较器接口的匿名内部类,目的是告诉sort()方法,按照比较器来对list中的对象进行排序。如下所示:

     1 public class Test 
     2 {
     3     public static void main(String[] args) 
     4     {
     5         ArrayList<Entity> list=new ArrayList<Entity>();
     6         list.add(new Entity("李四",24));
     7         list.add(new Entity("张三",13));
     8         list.add(new Entity("王五",25));
     9         System.out.println("排序前:"+list);
    10         Collections.sort(list,new Comparator<Entity>() {
    11         @Override
    12         public int compare(Entity o1, Entity o2) 
    13         {
    14             if(o1.getAge()>o2.getAge())
    15             {
    16                 return 1;
    17             }
    18             else if(o1.getAge()<o2.getAge())
    19             {
    20                 return -1;
    21             }
    22             else
    23             {
    24                 return 0;
    25             }
    26         }
    27     });
    28         System.out.println("排序后:"+list);
    29     }
    30 }
    31 class Entity
    32 {
    33     String name;
    34     int age;
    35     public Entity(String name, int age) {
    36         super();
    37         this.name = name;
    38         this.age = age;
    39     }
    40     public String getName() {
    41         return name;
    42     }
    43     public void setName(String name) {
    44         this.name = name;
    45     }
    46     public int getAge() {
    47         return age;
    48     }
    49     public void setAge(int age) {
    50         this.age = age;
    51     }
    52     @Override
    53     public String toString() {
    54         return "Entity [name=" + name + ", age=" + age + "]";
    55     }
    56 }

      当给sort()方法传入比较器的时候,sort()方法就会根据比较器来对list中的对象进行排序。

    输出结果:

    排序前:[Entity [name=李四, age=24], Entity [name=张三, age=13], Entity [name=王五, age=25]]
    排序后:[Entity [name=张三, age=13], Entity [name=李四, age=24], Entity [name=王五, age=25]]

      而sort()方法为什么能对String类型的数据进行排序呢?

      答案是,String这个类实现了Comparable<String>接口。所以,可以直接用Collections.sort(list);来对String类型的数据进行排序。

  • 相关阅读:
    VUE可随意拖动的弹窗组件
    入园仪式
    Node启动https服务器
    《高性能javascript》阅读摘要
    浏览器HTTP缓存机制
    使用nightwatch进行E2E测试中文教程
    Puppeteer的入门教程和实践
    Spring AOP 笔记
    ApplicationContext国际化的支持
    Spring ApplicationContext中的”事件传递“笔记
  • 原文地址:https://www.cnblogs.com/baichunyu/p/11627171.html
Copyright © 2011-2022 走看看