java8新特性之Lambda表达式

1.为什么使用Lambda?

Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码项数据一样进行传递),可以写出来更加简洁、更加灵活的代码。作为一种更为紧凑的代码风格,使得java的语言表达能力得到了提升。
在没有Lambda表达式的时候,我们使用的是匿名内部类,比如:
在这里插入图片描述
将其转换为Lambda表达式就是:
在这里插入图片描述

2.Lambda表达式语法

Lambda表达式在java语言中引入了一个新的语法元素和操作符,这个操作符为->,该操作符被称为Lambda操作符或剪头操作符。它将Lambda分为两个部分:

  • 左侧:指定了Lambda表达式所需要的所有参数
  • 右侧:指定了Lambda表达式要执行的功能。

2.1无参,无返回值

Lambda体只需要一条语句

在这里插入图片描述

2.2需要一个参数,无返回值

先注意:在参数前面,可以不用加上参数类型,因为编译器可以推断出来。我们下面的举例都没有加上参数类型。详情见2.4。
在这里插入图片描述此时,参数的小括号可以省略:
在这里插入图片描述

2.3需要两个参数,有返回值

在这里插入图片描述
当表达式里面只有一条语句时,return与大括号都可以省略。
在这里插入图片描述

2.4类型推断

上述Lambda表达式中的参数类型都是由编译器推断而来的,Lambda表达式中无需指定类型,程序依然可以编译,因为javac根据程序的上下文,在后台推断出了参数的类型。Lambda表达式的类型依赖与上下文环境,是由编译器推断来的,这就是类型推断。

3.函数式接口

3.1什么是函数式接口

  • 只包含一个抽象方法,称为函数式接口。
  • 你可以通过Lambda表达式来创建该接口的对象,若Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽样方法上进行声明。
  • 我们可以在任意函数式接口上使用@FunctionalInterface注解,这样做可以检查它是否是一个函数式接口,同时,javac也会包含一个声明,说这个接口是一个函数式接口
    例:
    在这里插入图片描述
    在函数式接口中使用泛型:
    在这里插入图片描述
    作为参数传递Lambda表达式:

在这里插入图片描述
在这里插入图片描述
作为参数传递Lambda表达式:为了将Lambda表达式作为参数传递,接收Lambda表达式的参数类型必须是与该Lambda表达式兼容的函数式接口类型。

3.2java内置函数式接口

每一个需要接口的地方,我们都自己创建,是不是有点繁琐呢?没关系,java已经给我们想到了这一步,下面介绍java内置的函数式接口。

3.2.1java内置四大函数式接口

在这里插入图片描述

3.2.2其他接口

在这里插入图片描述

4.方法引用与构造器引用

4.1方法引用

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用。实现抽样方法的参数列表,必须与方法的参数列表保持一致!
方法引用:使用操作符“::”将方法名和对象或者类的名字分隔开来。如下三种主要使用情况。

  • 对象::实例方法
  • 类::静态方法
  • 类::实例方法

例如:
在这里插入图片描述
等同于:
在这里插入图片描述

例如:
在这里插入图片描述
等同于:
在这里插入图片描述
例如:
在这里插入图片描述
注意:当需要引用方法的第一个参数是调用对象,并且第二个参数是需要引用方法的参数时:ClassName::methodName

4.2构造器引用

格式:ClassName::new
与函数式接口相结合,自动与函数式接口中方法兼容,可以把构造器引用赋值给定义的方法,与构造器参数列表要与抽象方法的参数列表一致。
例如:
在这里插入图片描述
等同于
在这里插入图片描述

4.3数组引用

格式:type[]::new
例如:

在这里插入图片描述
等同于

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值