JAVA中的Lambda表达式

Lambda表达式

是JDK8中的语法糖,它的基本格式是:

(参数列表)->{处理过程}

可以看出他只关注传什么参,怎样处理。
举个例子:

//接口Inter里面有个方法function
public interface Inter {
    void function();
}
//类A构造方法需要传入Inter 实现类
public class A {
    public A(Inter i) {
    }
}

//当用匿名内部类实现时新建A时
new A(new Inter() {
    public void function() {
        接口方法的实现
    }
});
//当用Lambda表达式实现时
new A(()->{接口方法的实现});

可以看出 ()->{接口方法的实现} 代替了原来匿名内部类的编写。减少了代码量,但代码的可读性降低了。(在IDEA中可以Alt + 回车 实现匿名内部类和Lambda表达式的互相转换)
一般来说当匿名内部类为接口且只有一个方法需要重写就可以使用Lambda函数

方法泛型
//给方法加了泛型,在基本方法声明中加了<R>,R为参数列表中需要的泛型(可多个)
public <R> int f(R a){
        return 1;
    }

举个例子

//若有泛型接口,定义里面函数参数类型为T,返回值类型为R
public interface Inter<R, T> {
    R function(T t);
}
//若有方法需要传入该接口(此时可对接口中的R,T定义)
	public <R, T> R f(Inter<R, T> i){
        代码段最后返回R类型(返回值类型可更改)
}
//用匿名内部类创建A时,
f(new Inter<String, Integer>(){
    public String function(Intei) {
        return i.toString();
    }
});

//当用Lambda表达式时
f((Integer i) ->  {return i.toString();});

之后还可以进一步简化,原则为:

  1. 参数类型可省
  2. 方法体中只有一句代码时大括号、return、分号可省
  3. 方法只有一个参数时小括号可省
    所以还可以简化成
f( i -> i.toString());

经method reference(方法引用)后可化为

f( Object::toString);

(但IDEA转换后为 f((A<String, Integer>) Object::toString);
其中,方法引用指用 :: 来分割类名或对象与方法名,:: 左侧是类名或对象,:: 右侧是方法名。只有要实现的接口方法的参数列表和实现该接口方法中的方法的参数列表一致时才能使用。(我的理解是在本例中接口方法 function 参数列表为Integer,实现该接口方法中为i.toString,i也为Integer类型,如有错误请告知)

本文参考了三更草堂的B站视频

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值