当前位置: 首页 > article >正文

java8函数式接口(函数式接口的匿名实现类作为某些方法的入参)

文章目录

  • 前置介绍
  • 通过 lambda 表达式,使用匿名类,实现函数式接口
  • 函数式接口和回调函数的关系
  • 函数式接口的应用

前置介绍

是 Java 8 引入的核心概念之一,指的是 仅包含一个抽象方法的接口。它可以被 @FunctionalInterface 注解标记(可选),但即使不标记,只要满足“只有一个抽象方法”的条件,编译器也会将其视为函数式接口

函数式接口可以作为 Lambda 表达式的目标类型

往往通过 lambda 表达式的写法,使用一个匿名类,来实现一个函数接口

通过 lambda 表达式,使用匿名类,实现函数式接口

在 Java 8 之前,实现一个函数式接口需要通过匿名内部类

// 传统方式:匿名内部类
Runnable r = new Runnable() {@Overridepublic void run() {System.out.println("Hello from thread");}
};

Java 8 引入后,实现一个函数式接口可以通过 Lambda 表达式简化代码来表示一个匿名的实现类

函数式接口的匿名实现

这种 lambda 表示表示,它是一个匿名类,实现了函数式接口,同时这个匿名实现类中实现的这个方法没有传参,被实现的方法内执行的是一个 sout 的操作

// 使用 Lambda 表达式
Runnable r = () -> System.out.println("Hello from thread");

函数式接口和回调函数的关系

函数式接口的匿名实现类,往往作为某个方法的参数传递过去,这个函数式接口的匿名实现类其实可以看作一个“回调函数”,虽然其是一个匿名实现“类”,但是起到了回调函数的作用,因为可以通过用不同的匿名类实现函数式接口中的唯一那个方法,实现该方法的写法不同,就可以看成“回调函数”的能力了

@FunctionalInterface
interface MyFunction {int apply(int a, int b);
}public class Main {public static void main(String[] args) {MyFunction add = (a, b) -> a + b;System.out.println(add.apply(3, 4)); // 输出 7MyFunction sub = (a, b) -> a - b;System.out.println(sub.apply(3, 4)); // 输出 -1}
}

函数式接口的应用

很常见的场景就是 java 的流式处理中 lambda 表达式

List<String> names = Arrays.asList("Apple", "Banana", "Cherry");// 过滤长度大于5的字符串
List<String> result = names.stream().filter(Predicate.isEqual("Apple")) // 等于某个值.collect(Collectors.toList());
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
// 将数字转换为平方值
List<Integer> squares = numbers.stream().map(x -> x * x).collect(Collectors.toList());
List<String> names = Arrays.asList("Alice", "Bob");
// 打印所有名字
names.forEach(name -> System.out.println(name));
http://www.lryc.cn/news/2387218.html

相关文章:

  • linux自有服务
  • UniApp网页版集成海康视频播放器
  • Filter和Interceptor详解(一文了解执行阶段及其流程)
  • 鸿蒙仓颉开发语言实战教程:实现商城应用详情页
  • GitAny - 無需登入的 GitHub 最新倉庫檢索工具
  • 在飞牛nas系统上部署gitlab
  • 深入理解 Redis 哨兵模式
  • SQL进阶之旅 Day 4:子查询与临时表优化
  • [特殊字符]《Qt实战:基于QCustomPlot的装药燃面动态曲线绘制(附右键菜单/样式美化/完整源码)》
  • 力扣-最大连续一的个数
  • 无人机避障——深蓝学院浙大栅格地图以及ESDF地图内容
  • Postman基础操作
  • 【MPC控制 - 从ACC到自动驾驶】3 MPC控制器设计原理与参数配置:打造ACC的“最强大脑”
  • Unity3D仿星露谷物语开发52之菜单页面
  • 待定事项之存储数据
  • 电脑装的数据越多,会不会越重
  • 君正Ingenic webRTC P2P库libyangpeerconnection7编程指南
  • MySQL——复合查询表的内外连
  • 小米玄戒O1架构深度解析(一):十核异构设计与缓存层次详解
  • Numba模块的用法(高性能计算)
  • Kafka自定义分区策略实战避坑指南
  • PyTorch中cdist和sum函数使用示例详解
  • [免费]微信小程序宠物医院管理系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • centos7.9使用docker-compose安装kafka
  • ETL 工具与数据中台的关系与区别
  • SQLMesh Typed Macros:让SQL宏更强大、更安全、更易维护
  • DeepSpeed-Ulysses:支持极长序列 Transformer 模型训练的系统优化方法
  • Docker 使用镜像[SpringBoot之Docker实战系列] - 第537篇
  • 解锁MCP:AI大模型的万能工具箱
  • Error in beforeDestroy hook: “Error: [ElementForm]unpected width “