-
你可以通过 Lambda 表达式来创建该接口的对象,即Lambda表达式取代该接口的匿名内部实现类。(若 Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。
-
我们可以在任意函数式接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。
java8新特性:Lambda表达式这篇博客的4.1部分的MyFun就是一个函数式接口,我们通过Lambda表达式实现对一个数的具体运算。
@FunctionalInterface
public interface MyFun {
public Integer getValue(Integer num);
}
二 Java内置四大核心函数式接口
=================
Consumer : 消费型接口(一参,无返回值)
void accept(T t);
Supplier : 供给型接口(无参,有返回值)
T get();
Function<T, R> : 函数型接口(一参,有返回值)
R apply(T t);
Predicate : 断定型接口(一参,boolean返回值)
boolean test(T t);
关于这四个接口内抽象方法的记忆,博主提供一个方法:对于消费型接口Consumer,消费就需要给钱,别人接受,就是accept方法;对于 供给型接口Supplier,别人得到供给,对应的就是get方法;对于函数型接口Function<T,R>,别人需要应用你的函数,对应的就是apply方法;对于断定型接口Predicate,别人需要测试你的断言,对应的就是test方法。
4.1 四大内置函数式接口使用案例
先面的代码从下往上看,每一个接口的测试都需要一个接口作为形参的方法,然后使用Lambda表达式传递,对此方法进行测试。
//Predicate 断言型接口:
@Test
public void test4(){
List list = Arrays.asList(“Hello”, “beautiful”, “Lambda”, “www”, “ok”);
List strList = filterStr(list, (s) -> s.length() > 3);
for (String str : strList) {
System.out.println(str);
}
}
//需求:将满足条件的字符串,放入集合中
public List filterStr(List list, Predicate pre){
List strList = new ArrayList<>();
for (String str : list) {
if(pre.test(str)){
strList.add(str);
}
}
return strList;
}
//Function<T, R> 函数型接口:
@Test
public void test3(){
String newStr = strHandler("\t\t\t 我要学会函数式接口 ", (str) -> str.trim());
System.out.println(newStr);
String subStr = strHandler(“我要学会函数式接口”, (str) -> str.substring(5));
System.out.println(subStr);
}
//需求:用于处理字符串的方法
public String strHandler(String str, Function<String, String> fun){
return fun.apply(str);
}
//Supplier 供给型接口 :
@Test
public void test2(){
List numList = getNumList(10, () -> (int)(Math.random() * 100));
for (Integer num : numList) {
System.out.println(num);
}
}
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!