javaSe-Comparable和Comparator

javaSe-Comparable和Comparator
文章图片
两者区别 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
【javaSe-Comparable和Comparator】! 当然按照降序的话,就把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); } }

    推荐阅读