day12【函数式接口】

主要内容
  • 自定义函数式接口
  • 函数式编程
  • 常用函数式接口

1 函数式接口:JDK8新特性

  • 有且仅有一个抽象方法的接口
    (默认方法, 静态方法, 私有方法, 与 java.lang.Object 类中定义相同的抽象方法, 都不算作抽象方法)
  • 语法糖:是指更加方便,但底层原理不变的代码语法。
  • Lambda和匿名内部类不同,匿名内部类会产生类型(.class文件),而Lambda不产生类型,所以Lambda不是匿名内部类的语法糖
  • @FuncationalInterface注解
    在接口上使用, 检测当前的接口是否为函数式接口

2 函数式编程

2.1 Lambda的延迟执行

  • 解决调用方法时,字符串参数无论方法内裸机是否成立,都会进行拼接的资源浪费
  • Lambda延迟的效果是根据接口进行实现的,满足效果才会调用接口的方法

2.2 使用Lambda作为参数和返回值

1.作为参数
new Thread(()->[sout("线程执行了")}).start();
2.作为返回值
return (a,b)->a-b;

3 常用函数式接口

3.1 Supplier接口

生产型接口
获取值 a和b的和, 获取数组最大值, 获取一个Person对象

T get()用于获取一个对象或值.
至于获取什么值, 怎么获取, 需要我们根据应用场景编写Lambda来实现

3.2 Consumer接口

消费型接口
使用值 给它一个String让他打印, 给它一个对象

1.抽象方法:void accept(T t):用于消费(使用)一个对象或值. 
至于怎么消费, 要我们根据应用场景编写Lambda实现
2.默认方法:andThen
拼接两个Consumer接口的Lambda对象实现连续操作. 谁写前面, 谁先消费
default Consumer<T> andThen(Consumer<? super T> after):

3.3 Predicate接口

判断型接口
判断值 判断字符串长度是否大于5

1.抽象方法:boolean test(T t)
用于条件判断
2.默认方法
and:相当于"&&"效果
or:相当于"||"效果
negate:相当于"!"效果

3.4 Function接口

转换型接口
转换值 给它一个String转换为Integer “123”->123

1.抽象方法:R apply(T t)
根据T类型的数据转换为R类型的数据
2.默认方法:andThen()
拼接多个Function转换
  • 根据一个数据类型得到另一个数据类型,前者是前置条件,后者是后置条件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值