Java8新特性 lambda表达式以及函数引用

0.函数式编程

函数式编程(Functional Programming)属于编程范式(Programming Paradigm)中的用语,此外还有命令式编程(Imperative Programing)等,有兴趣的同学可以自行了解,我们这里大概解释一下函数式编程,在函数式编程中,输入一旦确定了,输出都确定了,函数调用的结果只依赖于传入的输入变量和内部逻辑,不依赖于外部,这样的写出的函数没有副作用。

1. 什么是 Lambda表达式

Lambda是JAVA 8添加的一个新的特性 Lambda是一个匿名函数。

Lambda表达式的重要特征:

  1. 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  2. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  3. 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  4. 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

( ):用来描述参数列表
->:箭头运算符
{ }:用来描述方法体

2.Lambda表达式

为什么要使用Lambda表达式:

为了方便快捷对一个接口进行实现

Lambda 表达式的简单例子:

// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)

3.什么接口能用Lambda表达式实现

接口中定义的必须要实现的抽象方法只能有一个

一般用Lambda表达式实现的接口都用@FunctionalInterface去约束

4.Lambda表达式高级写法 ::

  • 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt
  • 实例方法引用,通过实例对象::实例方法,如 str::substring
  • 构造方法引用,通过类名::new, 如 User::new
public static void main(String[] args) {  
    // 使用双冒号::来构造静态函数引用  
    Function<String, Integer> fun = Integer::parseInt;  
    Integer value = fun.apply("123");  
    System.out.println(value);  
  
    // 使用双冒号::来构造非静态函数引用  
    String content = "Hello JDK8";  
    Function<Integer, String> func = content::substring;  
    String result = func.apply(1);  
    System.out.println(result);  
  
    // 构造函数引用  
    BiFunction<String, Integer, User> biFunction = User::new;  
    User user = biFunction.apply("mengday", 28);  
    System.out.println(user.toString());  
  
    // 函数引用也是一种函数式接口,所以也可以将函数引用作为方法的参数  
    sayHello(String::toUpperCase, "hello");  
}  

Java内置四大核心函数式接口

函数式接口参数类型返回类型用途
Consumer消费型接口Tvoid对类型为T的对象应用操作:void accept(T t)
Supplier提供型接口T返回类型为T的对象:T get()
Function<T, R>函数型接口TR对类型为T的对象应用操作,并返回结果为R类型的对象:R apply(T t)
Predicate断言型接口Tboolean确定类型为T的对象是否满足某约束,并返回boolean值:boolean test(T t)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家级著名CV工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值