在进行软件构造实验三的过程中,遇到了对List集合按照对象的某一属性排序的问题,我们知道,在一般的情况下,java中提供了对集合进行操作的工具类Collections,
Collections能够对集合中的元素用默认的排序方法sort来根据元素的自然顺序对指定集合按升序进行排序。
- 对于常用的java自带的类:
在java中,很多类自己实现好了Comparable接口,并且重写了comepareTo方法,所以我们可以直接调用方法就可以实现排序。我们拿Integer类来举例子:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test{
public static void main(String[] args) {
//创建
List<Integer> list = new ArrayList<Integer>();
list.add(9);
list.add(2);
list.add(5);
list.add(1);
System.out.println(list);
//排序
Collections.sort(list);
System.out.println(list);
}
}
输出结果
[9 2 5 1]
[1 2 5 9]
2.对于自定义的类,按照类中某种属性就行排序,有两种方法:
方法一:
在我们自定义的类实现Comparable接口,并在类中重写public int compareTo(T o)方法。我们这个例子中对Entity集合按照Entuty里面的的age进行排序如下所示:
public class Test
{
public static void main(String[] args)
{
ArrayList<Entity> list=new ArrayList<Entity>();
list.add(new Entity("余涛",24));
list.add(new Entity("王宁",13));
list.add(new Entity("崔同发",25));
System.out.println("排序前:"+list);
Collections.sort(list);
System.out.println("排序后:"+list);
}
}
class Entity implements Comparable<Entity>
{
String name;
int age;
public Entity(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Entity [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Entity o)
{
if(this.getAge()>o.getAge())
{
return 1;
}
else if(this.getAge()<o.getAge())
{
return -1;
}
else
{
return 0;
}
}
}
为了对Entity这个类按照age的属性值从小到大排序,则让Entity这个类实现Comparable接口,并编写public int compareTo(Entity o) 方法。这样使用Collections.sort(list);就可以对list中的对象进行按照age大小排序。
根据>和<的情况返回的是1还是-1可以实现从大到小排序或者从小到大排序。
输出结果:
排序前:[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中的对象进行排序。如下所示:
public class Test
{
public static void main(String[] args)
{
ArrayList<Entity> list=new ArrayList<Entity>();
list.add(new Entity("余涛",24));
list.add(new Entity("王宁",13));
list.add(new Entity("崔同发",25));
System.out.println("排序前:"+list);
Collections.sort(list,new Comparator<Entity>() {
@Override
public int compare(Entity o1, Entity o2)
{
if(o1.getAge()>o2.getAge())
{
return 1;
}
else if(o1.getAge()<o2.getAge())
{
return -1;
}
else
{
return 0;
}
}
});
System.out.println("排序后:"+list);
}
}
class Entity
{
String name;
int age;
public Entity(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Entity [name=" + name + ", age=" + 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]]
以上便是对List集合按照对象的某一属性排序的方法。
参考文章
版权声明:本文为weixin_44993415原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。