javaSe-Comparable和Comparator

javaSe-Comparable和Comparator_第1张图片
两者区别

Comparable用法

! 这玩意只能进行自然升序排序,不可自定义排序规则。

class Human implements Comparable{
    private String name;
    private int age;
    public Human(String name,int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public int compareTo(Human o) {
        if(this.age == o.age && this.name == o.name) {
            return 0;
        }else if(this.age > o.age) {
            return 1;
        }else {
            return -1;
        }
    }
    @Override
    public String toString() {
        return "Human [name=" + name + ", age=" + age + "]";
    }
}
public class TestLambda {
    public static void main(String[] args) {
        List humans = new ArrayList<>(); 
        humans.add(new Human("A",55));
        humans.add(new Human("Bbbbbbbb",9));
        humans.add(new Human("cC",15));
        Collections.sort(humans);
        humans.forEach(System.out::println);    
    }
}

Comparator

! 在compare(Object o1,Object o2)里呢,相比上边的那个comparable,这里的comparator可以进行自定义的排序,比如按照升序排序:

  • o1 == o2 就返回 0
  • o1 > o2 就返回 1
  • o1 < o2 就返回 -1

! 当然按照降序的话,就把1和-1换个位置。

class Human{
    public int age;
    public String name;
    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 Human(int age,String name) {
        super();
        this.age = age;
        this.name = name;
    }
    @Override
    public String toString() {
        return "Human [age=" + age + ", name=" + name + "]";
    }
}
public class TestLambda {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Human(111,"aaa"));
        list.add(new Human(22,"b"));
        list.add(new Human(55,"hhH"));
        Collections.sort(list,new Comparator() {
            @Override
            public int compare(Human o1, Human o2) {
                if(o1.age == o2.age && o1.name == o2.name) {
                    return 0;
                }else if(o1.age > o2.age) {
                    return -1;
                }else {
                    return 1;
                }
            }
        });
        list.forEach(System.out::println);
    }
}

你可能感兴趣的:(javaSe-Comparable和Comparator)