如何对List集合中的对象进⾏按某个属性排序
我们在实际的开发⼯作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某⼀个属性进⾏排序
当list集合中的元素类型是我们⾃定义类型时,有两种对list中的元素进⾏排序的⽅法:
sortout什么意思中文⽅法⼀
  让list集合中的元素类型,也就是我们⾃定义的类实现Comparable<T>接⼝,并在类中编写public int compareTo(T o)⽅法。如下所⽰: 1public class Test
2 {
3public 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 }
14class Entity implements Comparable<Entity>
15 {
16    String name;
17int age;
18public Entity(String name, int age) {
19super();
20this.name = name;
21this.age = age;
22    }
23public String getName() {
24return name;
25    }
26public void setName(String name) {
27this.name = name;
28    }
29public int getAge() {
30return age;
31    }
32public void setAge(int age) {
33this.age = age;
34    }
35    @Override
36public String toString() {
37return "Entity [name=" + name + ", age=" + age + "]";
38    }
39    @Override
40public int compareTo(Entity o)
41    {
Age()&Age())
43        {
44return 1;
45        }
46else Age()&Age())
47        {
48return -1;
49        }
50else
51        {
52return 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中的对象进⾏排序。如下所⽰:
1public class Test
2 {
3public 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
12public int compare(Entity o1, Entity o2)
13        {
Age()&Age())
15            {
16return 1;
17            }
18else Age()&Age())
19            {
20return -1;
21            }
22else
23            {
24return 0;
25            }
26        }
27    });
28        System.out.println("排序后:"+list);
29    }
30 }
31class Entity
32 {
33    String name;
34int age;
35public Entity(String name, int age) {
36super();
37this.name = name;
38this.age = age;
39    }
40public String getName() {
41return name;
42    }
43public void setName(String name) {
44this.name = name;
45    }
46public int getAge() {
47return age;
48    }
49public void setAge(int age) {
50this.age = age;
51    }
52    @Override
53public String toString() {
54return "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类型的数据进⾏排序。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。