public class Person {
private int id;
private int age;
private String name;
}
要求:假如有若干个Person对象存在一个List当中,对它们进行排序,分别按照id、age、name进行排序(正常的倒序、升序),假如年龄或者姓名重复,则按照id排序。
public class Person {
protected int id;
protected int age;
protected String name;
public Person(int id, int age, String name) {
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;
}
}
//抽象策略
public interface Sorter {
public void sort(List<Person> persons);
}
//按照id的升序
public class SorterByIdAsc implements Sorter {
@Override
public void sort(List<Person> persons) {
Collections.sort(persons, new MyComp());
}
class MyComp implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.id - o2.id;
}
}
}
//按照id的降序
public class SorterByIdDesc implements Sorter {
@Override
public void sort(List<Person> persons) {
Collections.sort(persons, new MyComp());
}
class MyComp implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o2.id - o1.id;
}
}
}
//按照名字的升序
public class SorterByNameAsc implements Sorter {
@Override
public void sort(List<Person> persons) {
Collections.sort(persons, new MyComp());
}
class MyComp implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
if(o1.name.equals(o2.name)){
return o1.id - o2.id;
}
return o1.name.compareTo(o2.name);
}
}
}
//按照姓名的降序
public class SorterByNameDesc implements Sorter {
@Override
public void sort(List<Person> persons) {
Collections.sort(persons, new MyComp());
}
class MyComp implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
if(o1.name.equals(o2.name)){
return o2.id - o2.id;
}
return o2.name.compareTo(o1.name);
}
}
}
public class SorterByAgeDesc implements Sorter{
@Override
public void sort(List<Person> persons) {
Collections.sort(persons, new MyComp());
}
class MyComp implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
if(o1.age==o2.age){
return o2.id-o1.id;
}
return o2.age-o1.age;
}
}
}
//按照年龄的升序排序
public class SorterByAgeAsc implements Sorter{
@Override
public void sort(List<Person> persons) {
Collections.sort(persons, new MyComp());
}
class MyComp implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
if(o1.age==o2.age){
return o1.id-o2.id;
}
return o1.age-o2.age;
}
}
}
public class Environment {
public static void sort(Sorter sorter,List<Person> persons){
sorter.sort(persons);
}
}