如何对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小时内删除。
发表评论