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);
}
}
推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 2020-04-07vue中Axios的封装和API接口的管理
- 烦恼和幸福