方法引用简化Lambda表达式

首先我们要知道方法引用是用来干什么的?
它是用来简化Lambda表达式,因此前提就是你简化的是Lambda表达式。不知道Lambda表达式怎么写的话可以转步的另一篇文章:Lambda表达式的详细介绍

格式: 类型或对象::方法

1.实例方法的引用

注意:被引用的方法的参数列表要和函数式接口的抽象方法的参数列表保持一致

我们直接看一段代码

List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
//使用Lambda表达式进行遍历:
//此处若看不懂移步我的上一篇文章
list.forEach(s ->System.out.println(s));
//方法引用继续进行简写
//注意:此时的s刚好是方法的参数列表的参数,因此可以进行简化
list.forEach(System.out::println);
//此时的System.out其实是作为一个对象存在的,就是输出流的一个对象
2.静态方法的引用

格式:类名::静态方法

被引用的方法列表的参数列表的函数式接口的参数列表保持一致

		List<Student> lis = new ArrayList<>();
		lis.add(new Student("huahi"));
		lis.add(new Student("hu"));
		lis.add(new Student("hua"));
		lis.add(new Student("huah"));
		lis.add(new Student("h"));
//Lambda表达式简化,表示按照姓名长度进行排序
		Collections.sort(lis ,(o1,o2) ->o1.getName().length() - o2.getName().length());
//静态方法进行简化:
		Collections.sort(lis ,(o1,o2) -> Student.Mcompare(o1, o2));
//继续简化:终极目标
Collections.sort(lis ,Student::Mcompare);
//此时前边的o1,o2要和后边的参数列表保持一致
-----------Student类要定义静态方法--------------------
class Student implements Comparator<Student>{
	String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Student(String name) {
		super();
		this.name = name;
	}
	public Student() {}

	@Override
	public String toString() {
		return "Student [name=" + name + "]";
	}
//定义静态方法
	public static int Mcompare(Student o1, Student o2) {
		
		return o1.getName().length() - o2.getName().length();
	}

	@Override
	public int compare(Student o1, Student o2) {
		
		return o1.getName().length() - o2.getName().length();
	}
}

特定类型方法的引用

格式: 特定类型::方法

需求:排序字符串按照字符排序,不区分大小写

		List<String> lis = new ArrayList<>();
		lis.add("ahuahi");
		lis.add("Ahu");
		lis.add("bhua");
		lis.add("Bhuah");
		lis.add("a");
		Collections.sort(lis);
		System.out.println(lis);
//打印结果:[Ahu, Bhuah, a, ahuahi, bhua] 不符合要求
//自定义比较器
//Lambda表达式写法
Collections.sort(lis,(String o1, String o2) ->  o1.compareToIgnoreCase(o2));
//简化:
Collections.sort(lis,String::compareToIgnoreCase);

方法引用简化代码的方式可遇不可求,不要为了方法引用你去简化代码,在需要的时候去简化何乐而不为?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值