Java中Fuction函数式接口的使用 java.util.Function是Java8新增的函数式接口所谓的函数式接口就是接口内部有且仅有一个抽象方法而Function的特性是约束了入参和出参数据类型的规则FunctionalInterfacepublicinterfaceFunctionT,R{//基础方法:需要自己实现转换逻辑 接收T类型参数返回R类型结果Rapply(Tt);//前置组合//执行顺序: 先执行 入参before.apply(v) - 再执行当前接口的 apply()defaultVFunctionV,Rcompose(Function?superV,?extendsTbefore){Objects.requireNonNull(before);return(Vv)-apply(before.apply(v));}//后置组合//执行顺序: 先执行当前接口的 apply(t) - 再执行 after.apply()defaultVFunctionT,VandThen(Function?superR,?extendsVafter){Objects.requireNonNull(after);return(Tt)-after.apply(apply(t));}//静态恒等方法输入值直接原样返回 t - tstaticTFunctionT,Tidentity(){returnt-t;}}1、apply方法使用packagecn.aopmin.function;importcn.hutool.core.util.StrUtil;importjava.util.function.Function;/** * java.util.function.Function#apply方法的使用 * 示例将字符串转数字 * * author aopmin * since 2026/7/8 */publicclassFunctionDemo1{publicstaticvoidmain(String[]args){testApply();}publicstaticvoidtestApply(){FunctionString,IntegerfunctionnewFunction(){OverridepublicIntegerapply(Strings){// 判断是否为数字字符串非数字返回nullif(StrUtil.isNumeric(s)){returnInteger.parseInt(s);}returnnull;}};System.out.println(function.apply(123));System.out.println(function.apply(abc));}}2、链式组合compose方法的使用packagecn.aopmin.function;importcn.hutool.core.util.StrUtil;importjava.util.function.Function;/** * java.util.function.Function#compose前置组合 * 示例数字字符串带前后空格先去空格再转数字 * author aopmin * since 2026/7/8 */publicclassFunctionDemo2{publicstaticvoidmain(String[]args){testCompose();}/** * compose当自身Function调用compose方法后先执行传入的before前置函数再执行自身Function#apply */publicstaticvoidtestCompose(){FunctionString,IntegerstrToInts-StrUtil.isNumeric(s)?Integer.parseInt(s):-1;FunctionString,StringtrimFuncStrUtil::trim;Stringsource 666 ;IntegerresultstrToInt.compose(trimFunc).apply(source);System.out.println(testCompose 带空格字符串转换结果result);// 对比不使用compose的情况IntegerwithoutComposestrToInt.apply(source);System.out.println(不使用compose直接转换withoutCompose);}}3、链式组合andThen方法的使用packagecn.aopmin.function;importcn.hutool.core.util.StrUtil;importjava.util.function.Function;/** * java.util.function.Function#andThen 后置组合 * 示例先转数字再乘10 * author aopmin * since 2026/7/8 */publicclassFunctionDemo3{publicstaticvoidmain(String[]args){testAndThen();}/** * andThen自身执行完再执行后置函数 */publicstaticvoidtestAndThen(){FunctionString,IntegerstrToInts-StrUtil.isNumeric(s)?Integer.parseInt(s):null;FunctionInteger,Integermul10n-n*10;FunctionString,IntegerchainstrToInt.andThen(mul10);System.out.println(testAndThenchain.apply(8));}}4、FunctionMap实现简单策略packagecn.aopmin.function;importcn.hutool.core.util.StrUtil;importjava.util.HashMap;importjava.util.Map;importjava.util.function.Function;/** * Function Map 简化策略模式 * 示例实现简单数学运算 * author aopmin * since 2026/7/8 */publicclassFunctionDemo4{// 全局策略Mapkey策略类型valueFunction策略privatestaticfinalMapString,FunctionInteger,StringSTRATEGY_MAP;// 静态初始化加载所有策略static{STRATEGY_MAPnewHashMap();// 策略1加5STRATEGY_MAP.put(add5,num-加法结果(num5));//使用lambda简化匿名内部类的写法// 策略2乘10STRATEGY_MAP.put(multiply10,num-乘法结果(num*10));// 策略3平方STRATEGY_MAP.put(square,num-平方结果(num*num));}/** * 统一策略执行入口 * * param type 策略标识 * param num 待计算数字 * return 处理后文本 */publicstaticStringexecuteStrategy(Stringtype,Integernum){// 根据key获取对应Function策略不存在给默认兜底策略FunctionInteger,StringfuncSTRATEGY_MAP.getOrDefault(type,n-未知操作原值n);returnfunc.apply(num);}publicstaticvoidmain(String[]args){// 测试不同策略System.out.println(executeStrategy(add5,10));System.out.println(executeStrategy(multiply10,10));System.out.println(executeStrategy(square,10));// 不存在的策略兜底System.out.println(executeStrategy(minus,10));}}

相关新闻

最新新闻

基于SpringBoot的好易校园二手交易网站毕业设计项目源码文档

基于SpringBoot的好易校园二手交易网站毕业设计项目源码文档

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/9/1 20:22:29
47K Star 的本地 AI 语音工作室,告别 ElevenLabs

47K Star 的本地 AI 语音工作室,告别 ElevenLabs

一、项目背景及简介你有没有遇到过这样的尴尬:想给视频配个旁白,发现 ElevenLabs 每月要花几十美元;想用语音输入,又担心隐私数据被第三方拿去做训练?更麻烦的是,语音克隆和语音识别这两个需求,…

2026/9/1 20:22:29
4核8G5M年付仅590元?天翼云S6实测:国家队下场,这波“羊毛”有点硬核

4核8G5M年付仅590元?天翼云S6实测:国家队下场,这波“羊毛”有点硬核

摘要:2026年云计算市场格局生变,天翼云稳居IDC双榜第二、SPEC测试刷新全球纪录。在技术实力登顶的同时,7月限时特惠却打出了“地板价”。本文从性能、网络、成本三个维度,深度拆解S6通用服务器套餐的真实性价比。01 为什么现在要关…

2026/9/1 20:22:29
B 站更新|软考系统架构师第二章全集上线|软件开发模型  需求工程

B 站更新|软考系统架构师第二章全集上线|软件开发模型 需求工程

各位备考软考系统架构设计师的小伙伴,大家好!继上一章节更新完毕,第二章「软件开发模型与需求工程」全套 9 集视频现已全部在 B 站更新完成。本章是名副其实的三科通吃重点章节:上午综合知识软件工程模块约 14‑15 分,…

2026/9/1 20:22:29
揭秘“新麦同城”O2O系统架构:UniApp+PHP如何撑起本地生活服务数字化?

揭秘“新麦同城”O2O系统架构:UniApp+PHP如何撑起本地生活服务数字化?

导读:在本地生活服务(O2O)赛道日益内卷的今天,如何快速构建一套支持多端覆盖、城市代理、且完全可控的预约服务平台?本文以“新麦同城服务小程序平台”为例,深度拆解其 UniApp PHP 技术栈选型逻辑、核心业…

2026/9/1 20:22:29
AI大模型培训机构怎么选?用RAG最小项目验证课程质量

AI大模型培训机构怎么选?用RAG最小项目验证课程质量

不管你是刚接触大模型开发,还是已经写过几个调用大模型接口的 demo,在面对“粤嵌科技、黑马程序员、华清远见这种机构到底怎么样、哪家值得报”这类问题时,都需要先有一个判断顺序:先搞清楚这一类机构普遍教什么,再建立…

2026/9/1 20:17:28