java 8 函数式接口_必看:通俗易懂地告诉你什么是java8中的“函数式接口”

花10分钟认真的看完一篇文章,或许会有意想不到的收获

a940d789b586ea50fc5280ea46b6fa85.png

java8发布已经好几年了,相信很多小伙伴都使用过java8,java8这版本带来了很多新特性,其中一个就是“函数式接口”,今天我们就一起来看看什么是函数式接口

废话少说,先看定义!

01定义

函数式接口在java中是指:有且仅有一个抽象方法的接口函数式接口,即适用于函数式编程场景的接口。而java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。

看完这个定义我们就能感觉到,函数式接口和Lambda表达式是分不开的,所以还不知道什么是Lambda表达式的小伙伴需要先去学习一下,可以看一下我的上一篇文章,对Lambda表达式有详细的讲解,下面所有的讲解都需要具备Lambda表达式的知识。

说完了定义我们来看看java源码中是如何定义一个函数式接口的

这个Runnable接口就是一个函数式接口,只有一个抽象方法。并且函数式接口都用@FunctionalInterface注解进行标注了,当一个接口打上@FunctionalInterface注解之后就声明为一个函数式接口,这个接口中就只能有一个抽象方法,大于一个抽象方法就会报错。

99ec352f89b46e624afda57652f63a06.png

02内置“四大函数式接口”

为了让大家了解为什么要内置函数式接口,我们先自己定义几个函数式接口

de900dba893799f72c8bb4211966cf4f.png

1c5565eb4c3cf1577caaafe440f251fe.png

9022ba16092c9d779d20fbcf5c72ae0a.png

01b71e2fa7e4e725b5b1340fb9b6f045.png

看完我们自定义的几个函数式接口,大家会发现其实这几个接口都差不多,不同的地方就是返回类型、参数类型、参数个数

所以,为了方便大家的使用java8中内置了很多函数式接口,其中最重要的有四个,分别如下:

1、Predicate函数式接口

Predicate是一个断言型接口,用于做判断操作,所以抽象方法返回的是Boolean

源码:

db1e7fec1566bdff656076b0de0954e4.png

例子:

2a1aaea0a0f423cdb9018079b63b1c9a.png

2、Function函数式接口

Function接口为函数型接口,该接口的抽象方法接收一个参数并且做一些处理然后返回

源码:

f5eb5e04e08db8a5f77fecf6c1827c87.png

例子:

a75da513d5b9e022f71e88d2bee7817d.png

3、Consumer函数式接口

Consumer是消费型接口。Consumer表示执行在单个参数上面的操作,但没有返回值的(正如消费有去无回)

源码:

f15c51934619b5a6d2ce6d9baa51deb7.png

例子:

2522a48dbf7a0dfde8c6af11b041e774.png

4、Supplier函数式接口

Supplier接口为供给型接口。该接口不接受任何参数,返回一个任意泛型的值

源码:

0ed529fce2988f5afeaad80978df84b8.png

例子:

2c2e5f112e73e761eb51eaf7984265b2.png

可以发现,这四个内置基本可以满足我们大部分的需要了,当然如果你还有其他需求,java8中还有其他的一些内置的函数式接口供你使用,或者你可以自定义函数式接口

03总结

1、函数式接口是为了方便Lambda的使用才产生的

3、java8提供的一些内置函数式接口能满足我们大部分的需求

2、java8的源码设计中很多地方也用到了内置的函数式接口

例如这个forEach方法

dca7adef928fcf425b1ae96ccac5187d.png

关注我每天我们一起进步

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值