学习任务:

视频学习

动手实现课程排序

compare方法优化

下边对课程对象按价格进行排序,compare方法接收的是两个课程对象,在compare方法需要比较课程的价格,代码如下:

package com.pbteach.javase.oop.arraylist.test2;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

/**
 * Comparator测试
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class ArrayListSortTest3 {
	
	//升序
	public static void testSort1() {
		System.out.println("========= 升序测试 ==========");
		//创建一个ArrayList集合
		List<PbCourse> list = new ArrayList<>();
		
		//添加元素
		list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
		list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
		list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
		list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
		list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
		list.add(new PbCourse(105L, "攀博课堂-SpringMVC框架教程", 22));
		
		list.sort((o1,o2)->{
			if(o1.getPrice()>o2.getPrice()) {
				return 1;
			}else if(o1.getPrice()<o2.getPrice()) {
				return -1;
			}else {
				return 0;
			}
		});
		list.forEach(System.out::println);
	}
	//降序
	public static void testSort2() {
		System.out.println("========= 降序测试 ==========");
		//创建一个ArrayList集合
		List<PbCourse> list = new ArrayList<>();
		
		//添加元素
		list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
		list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
		list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
		list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
		list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
		list.add(new PbCourse(105L, "攀博课堂-SpringMVC框架教程", 22));
		list.sort((o1,o2)->{
			if(o1.getPrice()>o2.getPrice()) {
				return -1;
			}else if(o1.getPrice()<o2.getPrice()) {
				return 1;
			}else {
				return 0;
			}
		});
		list.forEach(System.out::println);
	}
	public static void main(String[] args) {
		
		testSort1();
		testSort2();
		
	}
	

}

第一点优化:

compare返回大于0的值表示位置不变,返回小于0的值表示交换位置,课程的价格字段为整型所以可以求两个数的差来决定升降序,代码如下:

list.sort(new Comparator<PbCourse>() {
			@Override
			public int compare(PbCourse o1, PbCourse o2) {
				/*if(o1.getPrice()>o2.getPrice()) {
					return 1;
				}else if(o1.getPrice()<o2.getPrice()) {
					return -1;
				}else {
					return 0;
				}*/
				//以上代码可简化为,后边元素减去前边的元素
				return o1.getPrice()-o2.getPrice();
			}
			
		});

return o1.getPrice()-o2.getPrice();表示按升序排序,return o2.getPrice()-o1.getPrice();表示降序排序。

第二点优化:

可以给list.sort方法传入lambda表达式,代码如下:

//可以传入lambda表达式
list.sort((o1,o2)->o2.getPrice()-o1.getPrice());

完整代码如下:

package com.pbteach.javase.oop.arraylist.test2;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

/**
 * compare方法优化
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class ArrayListSortTest4 {
	
	//升序
	public static void testSort1() {
		System.out.println("========= 升序测试 ==========");
		//创建一个ArrayList集合
		List<PbCourse> list = new ArrayList<>();
		
		//添加元素
		list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
		list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
		list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
		list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
		list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
		list.add(new PbCourse(105L, "攀博课堂-SpringMVC框架教程", 22));
		
		list.sort(new Comparator<PbCourse>() {

			@Override
			public int compare(PbCourse o1, PbCourse o2) {
				/*if(o1.getPrice()>o2.getPrice()) {
					return 1;
				}else if(o1.getPrice()<o2.getPrice()) {
					return -1;
				}else {
					return 0;
				}*/
				//以上代码可简化为,后边元素减去前边的元素
				return o1.getPrice()-o2.getPrice();
			}
			
		});
		list.forEach(System.out::println);
	}
	//降序
	public static void testSort2() {
		System.out.println("========= 降序测试 ==========");
		//创建一个ArrayList集合
		List<PbCourse> list = new ArrayList<>();
		
		//添加元素
		list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
		list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
		list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
		list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
		list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
		list.add(new PbCourse(105L, "攀博课堂-SpringMVC框架教程", 22));
		//可以传入lambda表达式
		list.sort((o1,o2)->o2.getPrice()-o1.getPrice());
		list.forEach(System.out::println);
	}
	public static void main(String[] args) {
		
		testSort1();
		testSort2();
		
	}
	

}

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题