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

java--函数式接口全面总结与使用场景指南

1. 无参无返回值 — Runnable

  • 接口方法void run()

  • 用途:执行一段代码,无参数,无返回值。

Runnable task = () -> System.out.println("执行任务");
task.run();

2. 无参有返回值 — Supplier<R>

  • 接口方法R get()

  • 用途:提供一个返回值,无参数。

Supplier<String> supplier = () -> "Hello World";
String s = supplier.get();

3. 有参无返回值 — Consumer<T>

  • 接口方法void accept(T t)

  • 用途:接收一个参数,执行操作,无返回。

Consumer<String> consumer = msg -> System.out.println("消息:" + msg);
consumer.accept("你好");

4. 有参有返回值 — Function<T, R>

  • 接口方法R apply(T t)

  • 用途:接收一个参数,返回一个结果。

Function<String, Integer> func = s -> s.length();
int len = func.apply("Hello");

5. 两个参数无返回值 — BiConsumer<T, U>

  • 接口方法void accept(T t, U u)

  • 用途:接收两个参数,执行操作,无返回值。

BiConsumer<String, Integer> biConsumer = (name, age) -> System.out.println(name + " 年龄是 " + age);
biConsumer.accept("Tom", 20);

6. 两个参数有返回值 — BiFunction<T, U, R>

  • 接口方法R apply(T t, U u)

  • 用途:接收两个参数,返回一个结果。

BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
int sum = add.apply(3, 5);

7. 多个参数有返回值 — 自定义接口

Java标准库不支持3个以上参数函数式接口,需要自定义

@FunctionalInterface
public interface TriFunction<T, U, V, R> {R apply(T t, U u, V v);
}

示例:

TriFunction<Integer, Integer, Integer, Integer> sumThree = (a, b, c) -> a + b + c;
int result = sumThree.apply(1, 2, 3);

8. 多个参数无返回值 - 自定义 BiConsumer

@FunctionalInterface
public interface TriConsumer<T, U, V> {void accept(T t, U u, V v);
}TriConsumer<String, Integer, Boolean> printer = (name, age, isStudent) -> {System.out.println(name + " - " + age + " - 是学生: " + isStudent);
};printer.accept("Alice", 22, true);

9. 总结表格

参数数量返回类型接口类型方法名示例
0Runnablerun()() -> {...}
0Supplierget()() -> "Hello"
1Consumeraccept()x -> System.out.println(x)
1Function<T,R>apply()s -> s.length()
2BiConsumer<T,U>accept()(x,y) -> {...}
2BiFunction<T,U,R>apply()(a,b) -> a + b
3+自定义apply()(a,b,c) -> {...}
3+自定义accept()(a,b,c) -> {...}

10. 使用场景举例

  • 异步任务:用 Runnable 传递无参无返回的代码块。

  • 延迟计算:用 Supplier 提供值的生成。

  • 消费数据:用 Consumer 处理单个输入数据。

  • 转换数据:用 Function 做类型转换。

  • 带上下文操作:用 BiConsumer 处理两个参数操作。

  • 计算结果:用 BiFunction 计算两个输入的结果。

  • 复杂操作:用自定义接口支持多个参数。

http://www.dtcms.com/a/301445.html

相关文章:

  • LeetCode 611.有效三角形的个数
  • python---eval函数
  • Ashampoo Background Remover(照片去背景工具) v2.0.2 免费版
  • Oracle EBS 库存期间关闭状态“已关闭未汇总”处理
  • 【成功经验分享】Github Education (Github学生认证)认证
  • 【NLP实践】一、中文短句情感二分类实现并提供RestfulApi服务调用
  • 创建属于自己的github Page主页
  • 数据结构第1问:什么是数据结构?
  • 重做日志-redo log
  • 决策树(Decision Tree)完整解析:原理 + 数学推导 + 剪枝 + 实战
  • 无向图的连通性问题
  • Qt C++ GUI 函数参数速查手册:基础与布局
  • Android 调试桥 (adb) 基础知识点
  • 通过knn算法实现识别数字
  • 【n8n教程笔记——工作流Workflow】文本课程(第一阶段)——5.4 计算预订订单数量和总金额 (Calculating booked orders)
  • nacos连接失败,启动失败常见问题
  • OpenCV-图像预处理③【图像梯度计算、边缘检测算法(如 Canny)、轮廓提取与分析、凸包特征检测,以及 轮廓的外接几何特征(如最小外接矩形、外接圆等)】
  • 硅基计划3.0 学习总结 肆 二叉树 初版
  • [每周一更]-(第148期):使用 Go 进行网页抓取:Colly 与 Goquery 的对比与思路
  • QT---概览
  • 优化Linux高并发:文件描述符与端口范围的协同调优
  • SPSC无锁环形队列技术(C++)
  • FreeRTOS—空闲任务
  • 【Python系列】Flask 应用中的主动垃圾回收
  • idea打开后project窗口未显示项目名称的解决方案
  • LangGraph快速入门项目部署
  • C++ 中实现 `Task::WhenAll` 和 `Task::WhenAny` 的两种方案
  • 从0搭建YOLO目标检测系统:实战项目+完整流程+界面开发(附源码)
  • jenkins只能运行2个任务,提示:“等待下一个可用的执行器”
  • Redis C++客户端——命令使用