Java中Fuction函数式接口的使用

发布时间:2026/10/19 1:06:35
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));}}

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询