原理说明及demo
参考:http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html
应用
comparator
- 环境(Context)角色:采用了匿名类的方式,来存放实现了comparator的类
- 具体策略(ConcreteStrategy)角色:Collections作为封装了排序算法的包装类
- 抽象策略(Strategy)角色:comparator接口
- comparatorList(),comparatorArray()方法则模拟了一个外部调用
@Test
publicvoid comparatorList() {
List<BaseUser> list = new ArrayList<>();
list.add(BaseUser.create("a", 11));
list.add(BaseUser.create("b", 13));
list.add(BaseUser.create("c", 12));
//排序用到的字段是不能为空,否则会有空指针异常
Collections.sort(list, new Comparator<BaseUser>() {
@Override
public int compare(BaseUser o1, BaseUser o2) {
return o1.getAge().compareTo(o2.getAge());
}
});
System.out.println(list.toString());
//如果BaseUser实现了comparable,则可使用以下方法,反转排序
//由于未实现comparable,异常java.lang.ClassCastException: com.xyy.springboot.domain.BaseUser cannot be cast to java.lang.Comparable
//Collections.sort(list, Collections.reverseOrder());
}
@Test
public void comparatorArray() {
BaseUser[] array = new BaseUser[3];
array[0] = BaseUser.create("a", 11);
array[1] = BaseUser.create("b", 13);
array[2] = BaseUser.create("c", 12);
//排序用到的字段是不能为空,否则会有空指针异常
Arrays.sort(array, new Comparator<BaseUser>() {
@Override
public int compare(BaseUser o1, BaseUser o2) {
return o1.getAge().compareTo(o2.getAge());
}
});
System.out.println(Arrays.toString(array));
//如果BaseUser实现了comparable,则可使用以下方法,反转排序
//由于未实现comparable,异常java.lang.ClassCastException: com.xyy.springboot.domain.BaseUser cannot be cast to java.lang.Comparable
// Arrays.sort(array, Collections.reverseOrder());
}
package com.xyy.springboot.domain;
public class BaseUser {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public BaseUser() {
}
public BaseUser(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "BaseUser{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public static BaseUser create(){
return new BaseUser();
}
public static BaseUser create(String name, Integer age){
return new BaseUser(name, age);
}
}