【java 8】函数式接口
2023-09-27 14:26:52 时间
📋 个人简介
- 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜
- 📝 个人主页:馆主阿牛🔥
- 🎉 支持我:点赞👍+收藏⭐️+留言📝
- 📣 系列专栏:java 小白到高手的蜕变🍁
- 💬格言:要成为光,因为有怕黑的人!🔥
前言
我们知道Lambda表达式的前提就是要转换的接口必须是函数式接口,那么这节我们就总结一下函数式接口,看看什么是函数式接口!
什么是函数式接口
- 只包含一个抽象方法的接口称为函数式接口。
- 你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式
抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。 - 我们可以在一个接口上使用@Functionallnterface 注解,这样做可以检
查它是否是一个函数式接口。同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。 - 在 java.util.function 包下定义了 Java 8的丰富的函数式接口
如何理解函数式接口
- Java 从诞生日起就是一直倡导"一切皆对象",在 Java 里面面向对象(OOP)编程是一切。但是随着 python 、 scala 等语言的兴起和新技术的挑战, Java 不得不做出调整以便支持更加广泛的技术要求,也即 java 不但可以支持 OOP 还可以支持 OOF (面向函数式接口)
- 在函数式编程语言中,函数被当作一等公民对待。在将函数作为一等公民的编程语言中, Lambda 表达式的类型是函数。但是在Java 8中有所不同。在Java8中, Lambda 表达式是对象,而不是函数,它们必须依附于一类特别的对象类型——函数式接口。
- 简单的说,在Java 8中, Lambda 表达式就是一个函数式接口的实例。这就是 Lambda 表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么该对象就可以用 Lambda 表达式来表示。
- 所以以前用匿名实现类表示的现在都可以用 Lambda 表达式来写。
java 内置的四大核心函数式接口
下面写两个例子对这些函数式接口举例:
举例一:
public static void main(String[] args) {
// 1.消费型接口
Consumer<Integer> com = new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println("消费价钱为" + integer);
}
};
com.accept(100);
// Lambda 表达式写法
Consumer<Integer> com1 = integer -> System.out.println("消费价钱为" + integer);
com1.accept(100);
}
举例二:
public static void main(String[] args) {
// 断定型接口 举例:用断定型接口过滤字符串
List<String> lis1 = Arrays.asList("阿牛", "大牛", "小牛");
List<String> lis2 = filterString(lis1, new Predicate<String>() {
@Override
public boolean test(String s) {
return s.contains("牛");
}
});
System.out.println(lis2);
System.out.println("-------------");
// Lambda表达式写法
List<String> lis3 = filterString(lis1, s -> s.contains("牛"));
System.out.println(lis3);
}
public static List<String> filterString(List<String> list, Predicate<String> pre){
List<String> filterList = new ArrayList<>();
for (String s : list) {
if (pre.test(s)) {
filterList.add(s);
}
}
return filterList;
}
}
这里举了两个小例子理解函数式接口和Lambda表达式,还有许多函数式接口,这里不再举例,感兴趣的可以自己去了解!
结语
如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。
🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门
相关文章
- java特性之四--抽象
- java中functional interface的分类和使用
- Java 小记 — RabbitMQ 的实践与思考
- 利器 | Java 接口自动化测试首选方案:REST Assured 实践 (一)
- Java RESTful Web Service实战(第2版) 1.3 解读JAX-RS标准
- [转]深入理解Java的接口和抽象类
- JAVA双亲委派机制、不适用的场景及类加载过程
- Maven+SpringBoot+Java 搭建restful 接口API框架到docker部署及遇到的问题记录
- 【Java】+SOFA
- Java的当中的泛型
- java日志组件介绍(common-logging,log4j,slf4j,logback )
- 《21天学通Java(第7版)》—— 1.8 小测验
- 初学Java常用设计模式之——桥接模式和组合模式
- Java继承和接口
- 8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理
- 诊断Java代码中常见的数据库性能热点问题应该这么做!
- 【JAVA】Lambda接口&函数级接口
- java中接口的定义与实现
- java文件在没有安装jdk的windows下运行。
- Java String常用的两个方法
- java中json包的使用以及字符串,map,list,自定义对象之间的相互转换
- Java 线程池模拟用户并发请求接口代码示例
- Java-接口、继承与多态