给对象数组排序

个人笔记(可能有不严谨之处)

  1. 可以用Comparable (接口)来根据对象的某项属性来排序,其在lang包下不需要导入,

该接口对实现它的每个类的对象强加一个整体排序。 这个排序被称为类的自然排序

这里我选择狗狗的年龄进行排序

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]]
  1. 考虑到这里是接口,想着可以使用Lambda表达式,本来用的是Comparable,由于Comparable的方法compareTo 里面涉及到当前对象与指定对象的比较(需要用到this),因此就:
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]]

你可能感兴趣的:(对象数组排序,Lambda)