Java8新特性:函数式接口

  1. 你可以通过 Lambda 表达式来创建该接口的对象,即Lambda表达式取代该接口的匿名内部实现类。(若 Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。

  2. 我们可以在任意函数式接口上使用 @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开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值