JDK8的函数式接口
1:Lambda表达式需要函数式接口的支持
2:函数式接口就是只有一个抽象方法的接口
3:可以使用注解@funcitionalInterface修饰,限定该接口的格式,方式我们写错了
可以看到这是一个这是一个用于类,接口或者枚举类型的注解,@Retion表示该注解保留多长时间,它有以下三个取值
//:截图自个人有道云笔记
先来定义一个我们自己的函数式接口:
lambda表达式写的就是方法的具体实现,做一个字符串的拼接,这个函数式接口也能做其他各种各样的任务
也可以先定义方法的具体实现,再使用方法
将长度较长的字符串打印在控制台
Java内置的四大函数式接口
Comsumer: 消费性接口,消费对象
Supplier:供给性接口,生成对象
Function:函数性接口,指定特定功能(就像我们自定义的哪个函数式接口一样)
Predicate:断言性接口,条件判断
接下来一一使用它们:
Consumer接口实际用法:
比如我这里有一个需求,这是我在业务里实际遇到的需求,用户在elasticSerach搜索出来的数据有敏感和非敏感的区分以及数据经过算法得出的偏向性质,但是有时候这个性质用户看到觉得不对,需要改,而我偶们的数据是ElasticSearch一份,es的数据来自数据库,经过Logstash不断同步(设置一分钟一次)到Elasticsearch的,我们如果要更改es的数据的属性,就必须要更改数据库的数据的属性,不然下次logstash同步的时候,改动的数据就变过去了,如果我们这里一步步来,先改Es的数据,后改数据库的数据,这样花费的时间无疑是非常长的,用户可能难以接受。所以我们这里要用多线程和consumer接口,接下来,看代码:
这里用到了两个lambda表达式,一个是Comsumer的,另一个是Runnable的,如果用你咩那个内部类,至少增加二十行代码!!
Supplier供给性接口
理解成一个创建对象的工厂
Predicate断言接口
就是一个判断的接口哦
上代码:
Function函数性接口
它的作用就是指定特定功能的
看它的源代码
第一个参数是input,第二个参数是result
我这个代码有些脱了裤子放屁的感觉哈