Collections.sort 在java8 中通过Lambda表达式实现排序

Java8 中Lambda介绍

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。
示例如下

  Java8Tester tester = new Java8Tester();
        
      // 类型声明
      MathOperation addition = (int a, int b) -> a + b;
        
      // 不用类型声明
      MathOperation subtraction = (a, b) -> a - b;
        
      // 大括号中的返回语句
      MathOperation multiplication = (int a, int b) -> { return a * b; };
        
      // 没有大括号及返回语句
      MathOperation division = (int a, int b) -> a / b;
        
      System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
      System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
      System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
      System.out.println("10 / 5 = " + tester.operate(10, 5, division));
        
      // 不用括号
      GreetingService greetService1 = message ->
      System.out.println("Hello " + message);
        
      // 用括号
      GreetingService greetService2 = (message) ->
      System.out.println("Hello " + message);
        
      greetService1.sayMessage("Runoob");
      greetService2.sayMessage("Google");
   }
    
   interface MathOperation {
      int operation(int a, int b);
   }
    
   interface GreetingService {
      void sayMessage(String message);
   }
    
   private int operate(int a, int b, MathOperation mathOperation){
      return mathOperation.operation(a, b);
   }

java7 和Java8中Collections.sort的实现

java 7 中实现对象的排序是有两种方式,一种是在类定义的时候实现Comparable接口,另一种是匿名内部类的方式

第一种方式,在类定义的时候实现Comparable接口的代码实现

public class Student implements Comparable<Student>{

	private Integer id;
	private String name;
	
	
	public Student(Integer id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public int compareTo(Student student) {
		// TODO Auto-generated method stub
	  return this.id.compareTo(student.getId()); 
	}
	
	public static void main(String[] args) {
		
		Student a = new Student(1,"zhangsan");
		Student b = new Student(9,"lisi");
		Student c = new Student(5,"wangwu");
		
		List<Student> stuList = new ArrayList<Student>();
		stuList.add(a);
		stuList.add(b);
		stuList.add(c);
		Collections.sort(stuList);
		for(Student student : stuList){
			System.out.println("student.id " + student.getId() + "student.name" + student.getName());
		}
		
	}

第二种匿名内部类的方式

public class Student2{

	private Integer id;
	private String name;
	
	
	public Student2(Integer id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	
	public static void main(String[] args) {
		
		Student2 a = new Student2(1,"zhangsan");
		Student2 b = new Student2(9,"lisi");
		Student2 c = new Student2(5,"wangwu");
		
		List<Student2> stuList = new ArrayList<Student2>();
		stuList.add(a);
		stuList.add(b);
		stuList.add(c);
		
		Collections.sort(stuList, new Comparator<Student2>(){

			@Override
			public int compare(Student2 stu1,Student2 stu2) {
				// TODO Auto-generated method stub
				return stu1.getId().compareTo(stu2.getId());
			}			
		});
		
			
		for(Student2 student : stuList){
			System.out.println("student.id " + student.getId() + "student.name" + student.getName());
		}
		
	}
}

上面的匿名内部类在java8中可以通过Lambda代替

Collections.sort(lists, (Student2 stu1,Student2 stu2)->{
    return stu2.compareTo(stu1);
})
//或者
Collections.sort(lists, (Student2 stu1,Student2 stu2) -> stu1.compareTo(stu2));
//或者
Collections.sort(id, (stu1, stu2) -> stu2.compareTo(stu1));
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值