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));}}

相关新闻

最新新闻

Go语言SSTI与JWT伪造深度解析:从{{.}}泄露到Admin权限获取

Go语言SSTI与JWT伪造深度解析:从{{.}}泄露到Admin权限获取

Go语言SSTI与JWT伪造深度解析:从模板注入到权限提升实战1. 漏洞链构建原理剖析在Web安全领域,模板注入(SSTI)与JWT机制的结合利用正成为攻击者突破权限边界的新兴手段。当Go语言开发的Web应用存在模板注入漏洞时,攻击者往往能通过精心构造的P…

2026/7/9 10:41:54
Codex智能体框架:30分钟从技术创意到专利初稿的自动化撰写实践

Codex智能体框架:30分钟从技术创意到专利初稿的自动化撰写实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你是一名开发者,或者对技术创新稍有了解,你大概率听过一个说法:AI 正在改变一切。但当你真正想…

2026/7/9 10:41:54
Claude Code教程 -04- Hooks 自动化触发

Claude Code教程 -04- Hooks 自动化触发

Claude Code教程 -04- Hooks(自动化触发) Hooks 的价值就在于:把这些动作从“ 你记得做” 变成 “系统自动做” ,并且可以做到“该阻断就阻断、该后台跑就后台跑、该提醒就提醒”。 Hooks是什么? Hooks 是 Claude Code…

2026/7/9 10:41:54
GLM不是大模型:广义线性模型glm.cmp计数建模避坑指南

GLM不是大模型:广义线性模型glm.cmp计数建模避坑指南

1. 这不是“模型调用失败”,而是统计建模逻辑的断层看到标题里“GLM 4.7两例初级错误”,你可能下意识想到:是不是某个大语言模型API调用出错了?是不是prompt写漏了标点?但我要先泼一盆冷水——这里的GLM根本不是智谱的…

2026/7/9 10:41:54
【红蓝攻防】攻防演练手把手教你写溯源技战法

【红蓝攻防】攻防演练手把手教你写溯源技战法

一 前言相信大家对于攻防演练,应该都不陌生了,等级分初级,中级跟高级。其中对于中级的要求,是除了基本的监测和研判外,必须还要会一定的应急跟溯源。我这里就跟大家分享针对于溯源技巧的思路梳理。源的根本目标初级防守…

2026/7/9 10:41:54
TMC7300与PIC18F4685实现高效有刷直流电机控制

TMC7300与PIC18F4685实现高效有刷直流电机控制

1. TMC7300与PIC18F4685的黄金组合:有刷直流电机控制方案解析 在工业自动化和小型机电设备领域,有刷直流电机因其结构简单、成本低廉和控制方便等优势,仍然是许多应用场景的首选。但传统驱动方案常面临效率低下、发热严重和速度波动等问题。T…

2026/7/9 10:36:54

月新闻