java8特性-----方法引用

  在学习方法引用的时候,我发现方法引用其实与lambda表达式类似。在使用lambda表达式的时候,lambda带来的好处是,当我们仅仅希望调用那些已经存在函数名的方法,而没有任何多余动作时,lambda表达式使得调用过程的代码十分简洁。而方法引用是lambda表达式的另一种表现形式,所以,lambda表达式能使用的地方,方法引用也能使用.

方法类型方法引用lambda表达式
静态方法类名::staticMethod(参数)->类名.staticMethod(参数)
实例方法实例::instMethod(参数)->实例.instMethod(参数)
对象方法类名::instMethod(参数)->类名.instMethod
构造方法类名::new(参数)->new 类名(参数)

1、方法引用是什么

方法引用是用来直接访问类或者实例已经存在的方法或者构造方法。

2、方法引用举例

2.1、静态方法

创建一个food类,包含food的价格。之后要求将一组food实例按照价格排序

class food{
	private Integer price;
	food(int price){
		this.price = price;
	}
	public int getPrice(){
		return this.price.intValue();
	}
	public static int compare(food a,food b){
		return a.price.compareTo(b.price);
	}
}

测试

public static void main(String[] args){
	food[] foodArr = {new food(1),new food(5),new food(3),new food(2),new food(4)};
	Arrays.sort(foodArr,foodArr::compare);  //此处引用了food类中的静态方法
	//Arrays.sort(foodArr,(a,b)->food.compare(a,b))//   //lambda表达式写法
	for(food a:foodArr){
		System.out.println(a.getPrice());
	}
}
1
2
3
4
5

2.2、实例方法

实例方法在使用时与静态方法不同的是,需要先创建一个实例。

class food{
	private Integer price;
	private String name;
	food(int price){
		this.price = price;
	}
	food (String name){
		this.name = name;
	}
	public int getPrice(){
		return this.price.intValue();
	}
	public String getName(){
		return this.name;
	}
	public static int compare(food a,food b){
		return a.price.compareTo(b.price);
	}
}

测试

public static void main(String[] args){
	food Food = new food("鸡蛋");
	//Supplier<String> supplier1 = ()->Food.getName();// 
	Supplier<String> supplier2 = Food::getName;
}
鸡蛋

2.3、对象方法

所谓对象方法就是指,在lambda表达式中,第一个参数是实例,第二个参数为第一个参数调用方法的参数。

public static void main(String[] args){
	String[] strArr = {"a","c","e","d","b"};
	//Arrays.sort(strArr,(a,b)->a.compareTo(b));//
	Arrays.sort(strArr,strArr::compareTo);
	
}

2.4、构造方法

需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致。
在food类中有两个构造器,所以在使用构造方法引用时需要与这两种构造器的参数列表匹配

Function<String,food> function = food::new; //匹配的是food(String name)构造器

Function<Integer,food> function = food::new; //匹配的是food(int price)构造器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值