java中Comparator自定义排序

java中Comparator自定义排序:
Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法:
int compare(Object o1, Object o2) 返回一个基本类型的整型
如果要按照升序排序,则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)
如果要按照降序排序,则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)
**定义一个Person类,属性为姓名name,学号number,年龄age,性别sex,身高height,体重weigth,自定义排序规则为:
性别男优先
年龄从小到大
体重从低到高
身高从高到低
姓名字数从少到多**
Person.java

 public class Person {
    private String name;
    private String number;
    private int age;
    private String sex;
    private double height;
    private double weigth;
    public Person() {
        super();
    }
    public Person(String name, String number, int age, String sex, double height, double weigth) {
        super();
        this.name = name;
        this.number = number;
        this.age = age;
        this.sex = sex;
        this.height = height;
        this.weigth = weigth;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public double getHeight() {
        return height;
    }
    public void setHeight(double height) {
        this.height = height;
    }
    public double getWeigth() {
        return weigth;
    }
    public void setWeigth(double weigth) {
        this.weigth = weigth;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", number=" + number + ", age=" + age + ", sex=" + sex + ", height=" + height
                + ", weigth=" + weigth + "]";
    }
}

PersonTest.java

第一种方法:

public class PersonTest {
public static void main(String[] args) {
    List<Person> list=new LinkedList<Person>();
      list.add(new Person("钟爱", "201508020114", 21, "女", 162.01, 80.03));
      list.add(new Person("张大旗", "20150802", 22, "女", 159.99, 102.34));
      list.add(new Person("王大拿里哦", "20150802012", 20, "男", 182.01, 132));
      list.add(new Person("张三", "201501", 18, "男", 144, 112));
      list.add(new Person("张原野", "201505", 19, "女", 120, 144));
      list.add(new Person("李冬梅子", "201503", 20, "男", 189, 122));
      list.add(new Person("田园圣诞", "201504",20, "男", 189, 132));
      list.add(new Person("李很帅", "201502", 17, "男", 173, 132));

    for (Person person : list) {
        System.out.println("排序前"+person);
    }
    System.out.println("========================================================================");
    list.sort(new Comparator<Person>() {
        int flag=0;
        @Override
        public int compare(Person o1, Person o2) {
            int a=o1.getSex().compareTo(o2.getSex());
            if(a!=0&&a>0){
                return -1;
                    }
            else if(o1.getSex().equals(o2.getSex())){
                if(o1.getAge()<o2.getAge()){
                    return -1;
                }
                else if(o1.getAge()==o2.getAge()){
                    if(o1.getWeigth()<o2.getWeigth()){
                        return -1;
                    }
                    else if(o1.getWeigth()==o2.getWeigth()){
                        if(o1.getHeight()>o2.getHeight()){
                            return -1;
                        }
                        else if(o1.getHeight()==o2.getHeight()){
                            if(o1.getName().length()<o2.getName().length()){
                                return -1;
                            }
                        }
                    }
                }
            }
            return 1;
        }
    });
    for (Person person1 : list) {
        System.out.println("排序后"+person1);
    }
    }
    }

第二种方法:

public class PersonTest {
public static void main(String[] args) {
    List<Person> list=new LinkedList<Person>();
      list.add(new Person("钟爱", "201508020114", 21, "女", 162.01, 80.03));
      list.add(new Person("张大旗", "20150802", 22, "女", 159.99, 102.34));
      list.add(new Person("王大拿里哦", "20150802012", 20, "男", 182.01, 132));
      list.add(new Person("张三", "201501", 18, "男", 144, 112));
      list.add(new Person("张原野", "201505", 19, "女", 120, 144));
      list.add(new Person("李冬梅子", "201503", 20, "男", 189, 122));
      list.add(new Person("田园圣诞", "201504",20, "男", 189, 132));
      list.add(new Person("李很帅", "201502", 17, "男", 173, 132));
    for (Person person : list) {
        System.out.println("排序前"+person);
    }
    System.out.println("===============================================");
    list.sort(new Comparator<Person>() {
         int flag = 0;
        int a = o1.getSex().compareTo(o2.getSex());
        if (!(0 == a)) {
            flag = (a > 0 ? 1 : -1);
        } else {
            a = o1.getAge() - o2.getAge();
            if (a != 0) {
                flag = (a > 0 ? 1 : -1);
            } else {
                a = (int) (o2.getWeight()- o1.getWeight());
                if (a != 0) {
                    flag = (a > 0 ? 1 : -1);
                } else {
                     a = (int) (o1.getHeight() - o2.getHeight());
                    if (a != 0) {
                        flag = (a > 0 ? 1 : -1);
                    } else {
                         a = (int) (o2.getName().length() - o1.getName().length());
                        flag = (a > 0 ? 1 : -1);
                    }
                }
            }
        }
        return -flag;
        }
        }

输出结果截图:
这里写图片描述

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值