个人笔记(可能有不严谨之处)
该接口对实现它的每个类的对象强加一个整体排序。 这个排序被称为类的自然排序
这里我选择狗狗的年龄进行排序
class Dog implements Comparable<Dog>{
private String sort;
private int price;
private int age;
public Dog(){}
public Dog(String sort,int price,int age){
this.sort = sort;
this.price = price;
this.age = age;
}
public String toString(){
return "Dog[品种:"+sort+" 价格:"+price+" 年龄:"+age+"]";
}
//实现 Comparable的方法
public int compareTo(Dog dog){
System.out.print(this.age+"比较"); //这两行代码是我想看看它
System.out.println(dog.age); //是怎么给狗狗排序的
return this.age-dog.age;
}
}
ps:价格都是瞎编的
同时这里排序还要用到类Arrays的方法 sort(Object[] a)
sort(Object[] a) 对指定对象升序排列的阵列,根据natural ordering的元素。
需要导入Arrays所在的包
import java.util.Arrays;
public class Interface_Comparable_Comparator{
public static void main(String[] args){
Dog[] home = {new Dog("牛头梗",1500,4),new Dog("二哈",1000,3),new Dog("金毛",1200,7)};
Arrays.sort(home);
System.out.println(Arrays.toString(home));
}
}
以下是结果,按年龄的升序排序
D:\Users\86176\javadm\twenty-four\新建文件夹 (2)>java Interface_Comparable_Comparator
3比较4
7比较3
7比较4
[Dog[品种:二哈 价格:1000 年龄:3], Dog[品种:牛头梗 价格:1500 年龄:4], Dog[品种:金毛 价格:1200 年龄:7]]
Use_Lambda.java:5: 错误: 无法从静态上下文中引用非静态 变量 this
Comparable<Cat> ca = (cat)-> this.getPrice()-cat.getPrice();
3.然后就退而求次,使用Comparator,这个接口在java.util 包里,需要导包
class Cat {
private String sort;
private int price;
private int age;
public Cat(){}
public Cat(String sort,int price,int age){
this.sort = sort;
this.price = price;
this.age = age;
}
public int getPrice(){
return this.price;
}
public String toString(){
return "Cat[品种:"+sort+" 价格:"+price+" 年龄:"+age+"]";
}
}
以下是Lambda表达式的使用
import java.util.Comparator;
import java.util.Arrays;
public class Use_Lambda{
public static void main(String[] args){
// Comparator ca = (cat1,cat2)-> cat1.getPrice()-cat2.getPrice();
Cat[] home = {new Cat("波斯猫",1500,4),new Cat("狸猫",1000,3),new Cat("加菲猫",1200,7)};
Arrays.sort(home,(cat1,cat2)-> cat1.getPrice()-cat2.getPrice());
System.out.println(Arrays.toString(home));
}
}
运行结果如下
D:\Users\86176\javadm\twenty-four\新建文件夹 (2)>java Use_Lambda
[Cat[品种:狸猫 价格:1000 年龄:3], Cat[品种:加菲猫 价格:1200 年龄:7], Cat[品种:波斯猫 价格:1500 年龄:4]]