List是一个对象列表,当我们想根据list里面的对象中的某个属性排序时,怎么办呐?这时候就要用到Collections.sort方法
Collections.sort()方法有两个重载方法,一个是Collections.sort(List<T> list),一个是Collections.sort(List<T> list,Comparator<? super T> Comparator)
1.第一个方法,用于list中的对象本身就可以排序。比如List<String> strList = new ArrayList<String>();当我们将strList排序的时候,就可以直接用这个方法了,因为String本身是可以排序的,比如:
public class test {
/**
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("d");
list.add("b");
list.add("c");
list.add("e");
list.add("a");
Collections.sort(list);
for(String str:list){
System.out.println(str);
}
通过这个排序,就可以输出
a
b
c
d
e
结果。
2.当List存储的对象不能直接排序,比说说,我们创建了一个类是这样写的
class B{
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
当我们要对List<B> listB = new ArrayList<B>(); 就行排序的时候,就要用第二个方法了,代码实现为:
List<B> listB = new ArrayList<B>();
B b1 = new B();
b1.setName("zhou");
b1.setAge("45");
B b2 = new B();
b2.setName("li");
b2.setAge("38");
B b3 = new B();
b3.setName("jone");
b3.setAge("13");
B b4 = new B();
b4.setName("jomi");
b4.setAge("27");
listB.add(b1);
listB.add(b2);
listB.add(b3);
listB.add(b4);
Collections.sort(listB, new Comparator<B>() {
@Override
public int compare(B bf, B bs) {
return bf.getAge().compareTo(bs.getAge());
}
});
for(B b:listB){
System.out.println("name:"+b.getName()+" age:"+b.getAge());
}
会输出
name:zhou age:45
name:li age:38
name:jomi age:27
name:jone age:13
的结果。
在这里我们创建了四个B对象,加入到list中,Collections.sort(listB, new Comparator<B>() {})这一句意思是,要对List<B>就行排序,并new了一个比较器对象,ListB通过这个比较器对象中的实现方法(必须实现)compare中的逻辑就行排序。
public int compare(B bf, B bs){},这一句就是实现比较器对象中的比较方法。他定义了比较规则
return bs.getAge().compareTo(bf.getAge());这一句的意思是,用B对象中的哪个参数进行比较。我们拿第一个参数的年龄,跟第二个参数的年龄比较,如果第一个参数大于第二个参数,返回正数(比较器对象会通过返回的是正数,互换两个值的位置),这样最后就是升序排列了。如果想降序排列return bs.getAge().compareTo(bf.getAge());这样写就行了,也就是那第二个参数跟第一个参数进行比较。
Ok,今天就写到这里了,如有不同意见,欢迎提出讨论批评