java策略模式练习

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);
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值