List集合中的对象根据属性排序

List集合中的对象根据属性排序


集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A、B、C,则取得时候,则也是A、B、C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看下面小例子:

  1. package test.tool.gui.dbtool.util;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Collections;  
  5. import java.util.Comparator;  
  6. import java.util.List;  
  7.   
  8. public class Test {  
  9.   
  10.     public static void main(String[] args) {  
  11.           
  12.         List<Student> list = new ArrayList<Student>();  
  13.           
  14.         //创建3个学生对象,年龄分别是20、19、21,并将他们依次放入List中  
  15.         Student s1 = new Student();  
  16.         s1.setAge(20);  
  17.         Student s2 = new Student();  
  18.         s2.setAge(19);  
  19.         Student s3 = new Student();  
  20.         s3.setAge(21);  
  21.         list.add(s1);  
  22.         list.add(s2);  
  23.         list.add(s3);  
  24.           
  25.         System.out.println("排序前:"+list);  
  26.           
  27.         Collections.sort(list, new Comparator<Student>(){  
  28.   
  29.             /*  
  30.              * int compare(Student o1, Student o2) 返回一个基本类型的整型,  
  31.              * 返回负数表示:o1 小于o2,  
  32.              * 返回0 表示:o1和o2相等,  
  33.              * 返回正数表示:o1大于o2。  
  34.              */  
  35.             public int compare(Student o1, Student o2) {  
  36.               
  37.                 //按照学生的年龄进行升序排列  
  38.                 if(o1.getAge() > o2.getAge()){  
  39.                     return 1;  
  40.                 }  
  41.                 if(o1.getAge() == o2.getAge()){  
  42.                     return 0;  
  43.                 }  
  44.                 return -1;  
  45.             }  
  46.         });   
  47.         System.out.println("排序后:"+list);  
  48.     }  
  49. }  
  50. class Student{  
  51.       
  52.     private int age;  
  53.   
  54.     public int getAge() {  
  55.         return age;  
  56.     }  
  57.   
  58.     public void setAge(int age) {  
  59.         this.age = age;  
  60.     }  
  61.     @Override  
  62.     public String toString() {  
  63.         return getAge()+"";  
  64.     }  
  65. }  

执行结果:
  1. 排序前:[20, 19, 21]  
  2. 排序后:[19, 20, 21]  

当然对象的属性可以多个,比如按年龄升序,按成绩降序等


如果是字符串的话,可以使用

        Collections.sort(list,new Comparator<Student>() {

            @Override
            public int compare(Student stu1, Student stu2){
                
                
                return -1*stu1.getAge().compareTo(stu2.getAge());
            }
        });

发布了91 篇原创文章 · 获赞 78 · 访问量 54万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览