在项目开发中,有时API提供的方法不能满足实际需求,就需要自定义方法来进行,比如说,对一组对象进行排序,先根据学号排序,学号一样(假设有学号一样的学生),再根据年龄进行排序,年龄一样的再根据姓名排序,下面用两种方式实现。
第一种:Comparable接口实现
测试类:
import java.util.Set;
import java.util.TreeSet;
public class Text {
public static void main(String[] args) {
Set<Person> sp=new TreeSet<Person>();
Person p1=new Person(102,21,"abc");
Person p2=new Person(102,21,"dcb");
Person p3=new Person(102,21,"ddb");
sp.add(p1);
sp.add(p2);
sp.add(p3);
System.out.println(sp);
}
}
实现类:
public class Person implements Comparable<Person>{
private int id;
private int age;
private String name;
public Person(int id, int age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", age=" + age + ", name=" + name + "]";
}
@Override
public int compareTo(Person o) {
int value=0;
value=this.id-o.id;
if(value==0) {
value=this.age-o.age;
if(value==0) {
if(this.name!=null&&o.name!=null) {
value=this.name.compareTo(o.name);
}
}
}
return value;
}
}
输出:根据name排序
[Person [id=102, age=21, name=abc],
Person [id=102, age=21, name=dcb],
Person [id=102, age=21, name=ddb]]
第二种:Comparator接口实现
测试类:
import java.util.ArrayList;
import java.util.List;
public class TreeSetText {
public static void main(String[] args) {
List<Emp> eList=new ArrayList<Emp>();
eList.add(new Emp(1,23));
eList.add(new Emp(1,21));
eList.add(new Emp(1,18));
Collections.sort(eList, new EmpComparator());
System.out.println(eList);
}
}
初始化对象类
public class Emp {
private int id;
private int age;
@Override
public String toString() {
return "Emp [id=" + id + ", age=" + age + "]";
}
public Emp(int id, int age) {
super();
this.id = id;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
实现类:
import java.util.Comparator;
public class EmpComparator implements Comparator<Emp> {
@Override
public int compare(Emp o1, Emp o2) {
int val=o1.getId()-o2.getId();
if(val==0) {
val=o1.getAge()-o2.getAge();
}
return val;
}
}