Lambda|行为参数化 完整精讲

行为参数化(lambda) 行为参数化:就是一个方法接收多个不同的行为参数,并在内部使用他们,完成不同的行为能力。行为参数化可以更好的适应不断变化的需求,减少实际开发工作量。 现在有一些需求,苹果农场的农名将苹果采摘下来放在农场的仓库,需要从中筛选出所有绿色的苹果。 Apple类 public class Apple { private int weight = 0; private... 阅读详情

一、核心一句话(必背)

行为参数化:把「可变的业务逻辑(一段代码 / 行为)当作参数传递进方法」,同一个方法,传入不同行为,实现不同业务,消除大量重复 if-else、重复方法,避免重复造轮子。

传统编码:参数只能传数值、对象;行为参数化:代码逻辑也能当参数,是 Lambda 核心思想。

二、为什么需要行为参数化(传统代码痛点)

场景:筛选商品,示例痛点

需求 1:筛选价格 > 100 的商品需求 2:筛选分类 = 手机的商品需求 3:筛选价格 > 50 并且分类 = 电脑

传统写法缺点:

  1. 每多一个筛选规则,新建一个筛选方法 → 方法泛滥、重复循环代码
  2. 修改筛选条件就要改方法,开闭原则差
// 方案差:一个条件一个方法
List<Goods> filterByPrice(List<Goods> list,Integer price){}
List<Goods> filterByCategory(List<Goods> list,String category){}

行为参数化解决方案:只写 1 个通用 filter 方法,筛选规则通过入参传入。

三、演进路线(从原始→匿名内部类→Lambda,循序渐进理解)

步骤 1:定义函数式接口(承载行为)

函数式接口:只有一个抽象方法的接口,用来封装一段行为逻辑

@FunctionalInterface // 标记:只能一个抽象方法
public interface GoodsPredicate {
    // 参数:单个商品;返回:true/false 是否满足筛选条件
    boolean test(Goods goods);
}

步骤 2:编写通用过滤方法(固定逻辑:遍历集合;变化逻辑:判断规则→接口参数)

public static List<Goods> filterGoods(List<Goods> list, GoodsPredicate predicate){
    List<Goods> res = new ArrayList<>();
    for(Goods g : list){
        // 调用传入的行为逻辑
        if(predicate.test(g)){
            res.add(g);
        }
    }
    return res;
}

固定逻辑:循环遍历封装一次;变化逻辑:外部传入,这就是行为参数化精髓

步骤 3:三代调用写法对比

  1. 第一代:自定义实现类(笨重,新增规则新建类)
class PriceOver100 implements GoodsPredicate{
    @Override
    public boolean test(Goods g) {return g.getPrice()>100;}
}
//调用
filterGoods(list,new PriceOver100());
  1. 第二代:匿名内部类(省去实体类,但代码冗余)
filterGoods(list, new GoodsPredicate() {
    @Override
    public boolean test(Goods g) {
        return "手机".equals(g.getCategory());
    }
});
  1. 第三代:Lambda 表达式(行为参数化最终形态,极简)
// 筛选价格>100
filterGoods(list,g->g.getPrice()>100);
// 筛选分类电脑
filterGoods(list,g->"电脑".equals(g.getCategory()));

✅ 直接把判断逻辑(行为)作为第二个参数传入,不用新建类、不用匿名类

四、核心三大关键点(理解必背)

  1. 函数式接口是载体:承载要传递的行为,@FunctionalInterface注解约束
  2. 行为作为入参:方法形参定义为接口类型,调用时传入 Lambda(具体实现逻辑)
  3. 固定逻辑抽进方法,变化逻辑外部传入,一套方法适配 N 种业务

五、项目中四大落地运用场景(高频实战)

场景 1:集合筛选、排序、遍历(Stream 全套底层都是行为参数化)

List<Goods> goodsList;
// 筛选
List<Goods> phones = goodsList.stream().filter(g->"手机".equals(g.getCategory())).collect(Collectors.toList());
// 排序:排序规则作为参数
goodsList.sort((g1,g2)->g1.getPrice().compareTo(g2.getPrice()));
// 遍历:消费行为传入
goodsList.forEach(g-> System.out.println(g.getName()));
  • filter 参数Predicate、sort 参数Comparator、forEach 参数Consumer全是 JDK 内置函数式接口。

场景 2:自定义统一工具类(通用校验、统一处理器)

比如统一 Excel 导入:固定逻辑(读取文件、捕获异常),变化逻辑(每行数据保存逻辑通过 Lambda 传入)

//通用导入模板
public static <T> void importExcel(File file, Consumer<T> saveFunc){
    //固定:解析excel
    List<T> data = parseExcel(file);
    for(T item:data){
        saveFunc.accept(item); //外部传入保存逻辑
    }
}
//使用:传入不同保存逻辑
importExcel(file,user->userService.save(user));
importExcel(file,order->orderService.save(order));

场景 3:策略逻辑替换大量 if else(替代策略模式手写类)

比如优惠计算:统一结算方法,优惠策略通过 Lambda 传入

@FunctionalInterface
interface Discount{
    BigDecimal calc(BigDecimal money);
}
BigDecimal settle(BigDecimal money,Discount discount){
    return discount.calc(money);
}
//满减
settle(new BigDecimal(200),m->m.compareTo(new BigDecimal(100))>0?m.subtract(new BigDecimal(20)):m);
//折扣
settle(new BigDecimal(200),m->m.multiply(new BigDecimal("0.8")));

场景 4:线程任务、异步回调

Thread(Runnable):Runnable 是函数式接口,任务行为通过 Lambda 传入

new Thread(()-> System.out.println("执行任务")).start();

六、JDK 四大内置核心函数式接口(背诵,日常 90% 场景够用)

表格

接口抽象方法用途
Predicate<T>boolean test(T t)判断筛选:filter、条件校验
Consumer<T>void accept(T t)消费处理:forEach、数据保存
Function<T,R>R apply(T t)类型转换:map,T 转 R
Supplier<T>T get()对象供给:创建对象、延迟获取数据

示例快速使用:

//Function:字符串转Integer
Function<String,Integer> func = s->Integer.parseInt(s);
Integer num = func.apply("123");

七、行为参数化优点(面试简答)

  1. 代码复用:固定逻辑只写一次,减少重复代码,不重复造轮子
  2. 扩展性极强:新增业务规则不用新增方法 / 实体类,直接传 Lambda
  3. 消除臃肿 if-else、过多实体类,代码简洁
  4. 配合 Stream,简化集合操作

八、易混点总结

  1. Lambda 本质:函数式接口的实例,是行为参数化的语法糖;
  2. 行为参数化本质:把可变算法抽离为入参,面向接口、开闭原则落地;
  3. 没有函数式接口,就无法实现行为参数化。

九、背诵口诀

行为参数化,逻辑当参数;函数接口做载体,Lambda 传行为;固定代码写内部,变化规则外部给;筛选排序和回调,四大接口全搞定。

三相逆变器拓扑结构的分析及应用场景 三相逆变器是电力电子领域中广泛应用的一种设备,用于将直流电转换为交流电。不同的拓扑结构在性能、成本、复杂度和应用领域上存在差异。小编将在本文中将进一步拓展对三相逆变器拓扑结构的分析,并探讨其适用的应用场景。 阅读详情

相关推荐

【Unity报错】Unity导入海康SDK 报错 DllNotFoundException: PlayCtrl assembly

2.尝试按网上其他的办法(包括使用depengs查看dll依赖等)1.先检查Plugins文件夹中是否存在PlayCtrl文件。3.如果网上查阅的办法都不能解决,请继续往下看。更换低版本的SDK库文件。

weixin_42968584的博客 1126

java lambda 多个参数_Java Lambda行为参数化

Java Lambda行为参数化我们可以将lambda表达式作为参数传递给方法。例子以下代码创建了一个名为Calculator的函数接口。在Calculator中有一个称为calculate的方法,它接受两个int参数并返回一个int值。在Main类中有一个引擎方法,它接受函数接口Calculator作为参数。它从计算器调用计算方法并输出结果。在主方法中,我们用不同的lambda表达式调用引擎方法...

weixin_42650811的博客 1781

摩擦纳米发电机测试系统全解析:从硬件配置到软件控制

本文全面解析摩擦纳米发电机(TENG)测试系统,涵盖硬件配置、软件控制及系统集成。详细介绍NI USB-6003等采集卡的选择与使用,以及一体化控制软件的功能与优势,帮助研究人员高效评估纳米材料发电性能。系统支持自动测试与数据分析,显著提升测试效率与准确性。

weixin_28720767的博客 460

java行为参数化_Java Lambda行为参数化

Java Lambda行为参数化我们可以将lambda表达式作为参数传递给方法。例子以下代码创建了一个名为Calculator的函数接口。在Calculator中有一个称为calculate的方法,它接受两个int参数并返回一个int值。在Main类中有一个引擎方法,它接受函数接口Calculator作为参数。它从计算器调用计算方法并输出结果。在主方法中,我们用不同的lambda表达式调用引擎方法...

weixin_35275671的博客 441

SAP生产版本导入避坑大全:从‘黄灯’到‘绿灯’,详解CM_FV_MKAL_CONSISTENCY_CHECK检查函数

本文深入解析SAP生产版本导入过程中的常见问题,特别是通过`CM_FV_MKAL_CONSISTENCY_CHECK`检查函数从‘黄灯’异常到‘绿灯’正常的修复方法。涵盖静态与动态校验机制、典型异常场景诊断及批量导入最佳实践,帮助SAP运维人员高效解决生产版本管理难题。

weixin_30568591的博客 385

VSCode 降低适用版本并且关闭自动更新

官方表示,提高了远程服务器构建工具链的最低要求,更新了对 glibc 的要求,需要最低2.28版本。最快的方法是把vs code的版本降到1.85(为什么是这个版本呢?打开VS Code的官方网站(https://code.visualstudio.com/)通过查看可以知道,具体的版本没有直接显示分类,他是根据发布日期来分类的同时和版本匹配。在网站的顶部导航栏中找到”Updates”按钮,点击进入下载页面。找了半天一直没发现,原来就在紧挨着的下面。远程主机不满足运行vs code服务器的先决条件。

Sunflower的博客 9578

第1讲:为什么需要Java 8?—— 从行为参数化到Lambda

Java 8通过函数式编程革新了行为参数化模式,核心价值在于简化代码并提升可扩展性。文章详细解析了从传统策略模式到Lambda表达式的演进过程:初始实现面临代码重复问题,策略模式通过接口抽象筛选条件,而匿名类虽简化实现但仍显冗余。Lambda表达式最终提供简洁语法,配合函数式接口(Predicate、Function等)实现类型安全的行为传递。典型应用案例演示了如何用Lambda重写苹果筛选逻辑,并展示泛型方法实现多类型集合处理,显著提升代码复用性。这种范式转变使开发者能更高效地编写可维护、可扩展的代码。

热爱技术、喜欢学习、乐于分享 675

PyCharm与MicroPython联手:打造高效ESP32开发环境

本文详细介绍了如何使用PyCharm与MicroPython打造高效的ESP32开发环境。通过配置PyCharm插件、刷写MicroPython固件以及实战示例,帮助开发者快速上手嵌入式Python开发,显著提升物联网项目的开发效率。

weixin_29169899的博客 380

Java8新特性-行为参数化与lambda表达式

Java8新特性,lambda表达式,行为参数化

weixin_44183721的博客 1187

实战!用Python爬取海关总署进出口贸易数据 —— 从反爬突破到数据可视化全流程指南

{"period": "2026-05", "country": "美国", "import_val": 123.4, "export_val": 567.8, ...}研究员可构建领先指标模型;fig = px.bar(top, x="country", y="total_usd", title="贸易总额TOP10")html.H1("海关进出口数据看板", style={"textAlign": "center"}),"""发起带签名的POST请求(实际为GET + query param)"""

2201_76125261的博客 588

程序员应用AI大模型创业实现财务自由的100种赚钱方案原理与实战指南

成功的 AI 创业者都遵循着 “技术 + 需求 + 变现” 的铁三角法则。记住:不是要做 “全能大模型”,而是成为某个垂直领域的 “AI 解决方案专家”。现在就开始行动:用周末 2 小时完成第一个 MVP,下周启动种子用户测试,三个月内找到可复制的盈利模式。当你实现第一个 10 万用户时,会发现财务自由的密码藏在持续迭代的每个 0.1 版本更新中。延伸思考:你的技术背景适合切入哪个细分领域?

AI天才研究院 1378

行为参数化!

行为参数化,就是一个方法接受多个不同的行为作为参数,并在内部使用它们,完成不同行为的能力。 行为参数化可让代码更好地适应不断变化的要求,减轻未来的工作量。

wcg_jishuo的专栏 854

Open-AutoGLM 实战:手把手教你用 AI 操作手机「喂饭教程」

Open-AutoGLM 是一个由智谱AI开源的手机操作智能体框架,由手机端智能助手框架Phone Agent和9B大小的模型AutoGLM-Phone-9B组成,借助ADB自动执行点击、滑动、输入等操作——用户只需用自然语言描述任务,系统便能自动规划并完成整个操作流程。

blues_C的博客 1267

java8行为参数化/lambda实现示例

java8行为参数化/lambda实现示例//定义Applepublic class Apple { private String color; private int weight; private String type; public Apple(String color, String type, int weight) { this.color = color; this.type...

三月的博客 1711

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Java8】Java8实战之行为参数化与Lambda

Java8实战之行为参数化与Lambda 前言 现在Java的迭代速度比以前快了很多,然而,本渣渣最近才开始学习Java8,相比于之前的版本,Java8中引入了许多新的特性,其中最主要的是Lambda、Stream、Optional&amp;amp;lt;T&amp;amp;gt;、新的时间日期API,接下来将分成几个小节,分别学习这些内容,并且将学习笔记整理出来,参考书籍为《Java8实战》。 本小节主要学习行为参数...

曾经沧海难为水,除却巫山不是云 1020

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

行为参数化和Lambda表达式(Java8)

1 行为参数化 使用场景:应对频繁变更的需求(的一种软件开发模式) 使用好处:”一个方法,多个行为”,即写一个方法,可以接受不同的新行为作为参数,实现不同的功能。 举个例子:你要处理一个集合,可能会写出这样的业务方法: 对列表中每个元素都做“事件A” 处理完列表后做“事件B” 遇到错误时做“事件E” 行为参数化就是将上面所述的事件A、B、E等行为提升为...

此处省略三千字 1215

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

行为参数化

主要记录行为参数化知识,行为是指Java类中的方法,将行为参数化是指我们将具体的对数据操作的业务逻辑进行抽取将其抽象为参数,然后通过形参的方式传递给方法,让方法具有简洁性以及高可读性,高扩展性

梁恒嘉的博客(https://blog.crazymen.cn/) 673

Java 8 ——行为参数化

前言 《Java8实战》不得不说是一本好书,捧起来看起来就兴奋得不想放下,其中介绍的函数式编程实在是太令人兴奋了,不仅仅大大提高了代码的可读性,而且提高了代码的重用性,并且语法简单。 Java 8中新增的功能是自Java 1.0发布以来18年以来,发生变化最大的一次。我本身没有太大的体会,但新增的这些功能,每一个都让我兴奋,这里就书中的内容简单的介绍一下Java 8的这些新特性,我相信很快,你...

我没有三颗心脏的博客 1893

java 行为参数化_Java中的行为参数化

java 行为参数化The past isn’t here anymore, the future cannot be seen and the only thing permanent is the present moment and nothing else. Everything is the result of the change. There is nothing to questi...

weixin_26735419的博客 363

java8新特性详解之lambda:行为参数化

行为参数化 文骚人不骚的小隐开始整理java8的新知识了。 为什么要行为参数化 今天漂亮红姐过来啦,对着我莞尔一笑说:“小隐啊,我最近想倒腾点手机,现在有一批货,帮我找一下里面的苹果手机。”这还不好说么! /** * 筛选苹果手机 */ public static List&amp;amp;amp;lt;Phone&amp;amp;amp;gt; screenPhone(List&amp;amp;amp;lt;Phone&amp;amp;amp;gt; list) thro

诡道的博客 718

Java8-10-行为参数化

文章目录行为参数化版本1:要求筛选出颜色为绿色的苹果版本2:查找指定颜色的苹果版本3:查找重苹果版本4:使用策略模式版本5:使用匿名类版本6:lambda 表达式参考资料目录导航 行为参数化 在软件开发中,一个众所周知的问题就是无论你做什么,用户的需求总会改变。 举个栗子,假设要做一个帮助农场主理解库存的应用。 一开始,农场主可能想有一个在所有库存中找出所有绿色苹果的功能。 但是第二天他可能会告诉...

1万+

Java 8(一):行为参数化

文章目录1、认识行为参数化2、示例推演行为参数化2.1、筛选绿苹果2.2、颜色作为参数筛选2.3、多个属性作为参数筛选2.4、行为参数化2.5、根据抽象条件筛选2.6、使用匿名类2.7、使用Lambda表达式2.8、List 类型抽象化3、行为参数化在 Java API中的应用实例3.1、用 Comparator 排序3.2、用 Runnable 执行代码块 1、认识行为参数化 通过相关书籍或网络...

码客 841

【Java】函数式编程之通过行为参数化传递代码

——整理自《Java8实战》

vilavin的博客 1118

Java行为参数化(二)-Lambda表达式

二.行为参数化的Lambda形式 Java8在推出行为参数化的同时也提供了Lambda表达式,那么Lambda表达式是什么呢?为什么要用Lambda表达式呢? 在上一篇中我们写到的例子,就可以用Lambda来实现,我们一起来看看: public class one&lt;T&gt; { public static void main(String[] args){ ...

qq_39495331的博客 465

通过行为参数化传递代码

行为参数化就是可以帮你处理频繁变更的需求的一种软件开发模式. 一言以蔽之,它意味 着拿出一个代码块,把它准备好却不去执行它。这个代码块以后可以被你程序的其他部分调用, 这意味着你可以推迟这块代码的执行。例如,你可以将代码块作为参数传递给另一个方法,稍后 再去执行它。这样,这个方法的行为就基于那块代码被参数化了。 打个比方吧: 你的室友知道怎么开车去超市,再开回家。于是你可 以告诉他去买一些东西,比...

田培融的博客 350

java中的行为参数化

行为参数化是指能够把一个方法(代码)作为参数传递给另一个方法。 该文将通过一个案例逐步优化其代码实现展示行为参数化在java中的优异之处。

Dominery的博客 624
上一篇: 静态代理 & 动态代理:实战运用 + 场景区别 + 怎么选
下一篇: Java Lambda + 空指针四种主流处理方案
devilnumber
博客等级 码龄12年 19粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值