java对实体进行排序Comparator

通过实体的属性对多个实体进行排序(刚学习完面向对象,写的接口并没有用到,只是为了让**试着写一写接口):

/**
 * @comment:学生信息类
 * @author 傅里叶级数
 * @date 2018年10月22日下午2:18:14
 */
public class Student {

	private String name;
	private int age;
	private int height;
	private int mathScore;
	private int engScore;
	private String schName;
	
	
	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;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	public int getMathScore() {
		return mathScore;
	}
	public void setMathScore(int mathScore) {
		this.mathScore = mathScore;
	}
	public int getEngScore() {
		return engScore;
	}
	public void setEngScore(int engScore) {
		this.engScore = engScore;
	}
	public String getSchName() {
		return schName;
	}
	public void setSchName(String schName) {
		this.schName = schName;
	}
	
	
	
	
	@Override
	public String toString() {
		return "姓名: "+this.name+"  ,年龄: "+this.age+"  ,身高:"+this.height+"  ,就读学校:"+this.schName+
				"  ,数学成绩:"+this.mathScore+"  ,英语成绩:"+this.engScore;
	}
}

 

 



/**
 * @comment:排序方法接口
 * @author 傅里叶级数
 * @date 2018年10月22日下午3:46:53
 */
public interface StuSortInt {
	
	
	/**
	 * @comment:学生信息排序
	 * @author:傅里叶级数
	 * @date:2018年10月22日下午2:40:11
	 * @param list
	 */
	public void compareStudent(List<Student> list);
	
	
	/**
	 * @comment:学生信息多次排序
	 * @author:傅里叶级数
	 * @date:2018年10月22日下午3:28:19
	 * @param list
	 */
	public void compareStudentInfo(List<Student> list);
}

 

 

/**
 *@comment:接口的实现类
 *@author 傅里叶级数
 *@date 2018年10月22日下午3:28:41
 */
public class StuSortImpl implements StuSortInt{

	/**
	 * @comment:学生信息按照年龄排序
	 * @author 傅里叶级数
	 * @date 2018年10月22日下午3:26:43
	 */
	@Override
	public void compareStudent(List<Student> list) {
		Comparator<Student> comparator = new Comparator<Student>(){
			@Override
			public int compare(Student st1, Student st2) {
				return st2.getAge()-st1.getAge();
			}
		};
		
		Collections.sort(list, comparator);
		for (Student student : list) {
			System.out.println(student.toString());
		}
	}

	
	
	
	
	
	/**
	 * @comment:学生信息多重排序
	 * @author 傅里叶级数
	 * @date 2018年10月22日下午3:28:50
	 */
	@Override
	public void compareStudentInfo(List<Student> list) {
		Comparator<Student> comparator = new Comparator<Student>(){
			@Override
			public int compare(Student st1, Student st2) { // 重写compare方法
				if(st2.getAge()!=st1.getAge()){ // 按照年龄标准
					return st2.getAge()-st1.getAge();
				}else if(!st2.getName().equals(st1.getName())){ // 年龄相同,按照姓名标准
					return st2.getName().compareTo(st1.getName());
				}else{
					return st2.getMathScore()-st1.getMathScore(); // 按照数学成绩标准
				}
			}
		};
		// 调用Collection的sort方法进行排序
		Collections.sort(list, comparator);
		
		// 遍历
		for (Student student : list) {
			System.out.println(student.toString());
		}
	}
}

 

 

/**
 * @comment:学生信息管理
 * @author 傅里叶级数
 * @date 2018年10月22日下午2:19:10
 */
public class StudentController {

	public static void main(String[] args) {
		/**
		 * 学生信息造数据
		 */
		Student stu = new Student();
		Student stu1 = new Student();
		Student stu2 = new Student();
		Student stu3 = new Student();
		
		
		stu.setName("叶良辰");
		stu.setAge(22);
		stu.setSchName("蓝翔");
		stu.setHeight(171);
		stu.setMathScore(85);
		stu.setEngScore(88);
		
		
		stu1.setName("赵日天");
		stu1.setAge(23);
		stu1.setSchName("绿翔");
		stu1.setHeight(176);
		stu1.setMathScore(99);
		stu1.setEngScore(77);
		
		
		stu2.setName("叶良辰");
		stu2.setAge(28);
		stu2.setSchName("鸿翔");
		stu2.setHeight(180);
		stu2.setMathScore(99);
		stu2.setEngScore(99);
		
		
		stu3.setName("科大爷");
		stu3.setAge(23);
		stu3.setSchName("洛翔");
		stu3.setHeight(198);
		stu3.setMathScore(23);
		stu3.setEngScore(32);
		
		
		List<Student> list = new ArrayList<>();
		list.add(stu);
		list.add(stu1);
		list.add(stu2);
		list.add(stu3);
		
		
		StuSortImpl stuSortImpl = new StuSortImpl();
		//1.按照年龄排序
		stuSortImpl.compareStudent(list);
		System.out.println("按照多个标准排序:");
		//2.多个标准
		stuSortImpl.compareStudentInfo(list);
	}

}

结果:

姓名: 叶良辰  ,年龄: 28  ,身高:180  ,就读学校:鸿翔  ,数学成绩:99  ,英语成绩:99
姓名: 赵日天  ,年龄: 23  ,身高:176  ,就读学校:绿翔  ,数学成绩:99  ,英语成绩:77
姓名: 科大爷  ,年龄: 23  ,身高:198  ,就读学校:洛翔  ,数学成绩:23  ,英语成绩:32
姓名: 叶良辰  ,年龄: 22  ,身高:171  ,就读学校:蓝翔  ,数学成绩:85  ,英语成绩:88
按照多个标准排序:
姓名: 叶良辰  ,年龄: 28  ,身高:180  ,就读学校:鸿翔  ,数学成绩:99  ,英语成绩:99
姓名: 赵日天  ,年龄: 23  ,身高:176  ,就读学校:绿翔  ,数学成绩:99  ,英语成绩:77
姓名: 科大爷  ,年龄: 23  ,身高:198  ,就读学校:洛翔  ,数学成绩:23  ,英语成绩:32
姓名: 叶良辰  ,年龄: 22  ,身高:171  ,就读学校:蓝翔  ,数学成绩:85  ,英语成绩:88

 

转载于:https://my.oschina.net/FourierSeriesNzh/blog/2250722

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值