范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

行为参数化使用lambda传递代码

  行为参数化传递代码
  行为参数化是为了帮助我们应对不断变化的需求实现快速开发
  比如在List 苹果集合中我们需要实现:找出绿色苹果找出大苹果(重量大于500g)找出绿色大苹果
  对于这样的场景,我们可以将对集合的需求就可以抽象为一个行为。假设场景:
  1. 需要筛选绿苹果public static List filterGreenApples(List inventory) {     List result = new ArrayList();     for(Apple apple: inventory){         if( "green".equals(apple.getColor() ) { //筛选绿色             result.add(apple);         }     }     return result; }需要筛选各种颜色(将颜色抽象为参数)public static List filterGreenApples(List inventory) {     List result = new ArrayList();     for(Apple apple: inventory){         if( "green".equals(apple.getColor() ) {             result.add(apple);         }     }     return result; }需要大于500g的苹果或者绿苹果 public static List filterApples(List inventory, String color, int weight, boolean flag) { List result = new ArrayList(); for (Apple apple: inventory){ if ( (flag && apple.getColor().equals(color)) || (!flag && apple.getWeight() > weight) ){ result.add(apple); } } return result; } 这样确实比较蠢,不写注释的话,你能根据方法名判断flag是干啥的不?
  这个时候我们就可以运用" 行为参数化 " 来帮我们解决问题。
  首先我们来抽象需求:我们考虑的
  是苹果,需要根据Apple的某些属性(比如它是绿色的吗?重量超过xxx克吗?)来返回一个
  boolean值。我们把它称为谓词(即一个返回boolean值的函数)。让我们定义一个接口来对选
  JDK中为我们提供了一个接口public interface ApplePredicate{     boolean test (Apple apple); }
  现在我们可以根据不同需求实现不同的行为public class AppleHeavyWeightPredicate implements ApplePredicate{     public boolean test(Apple apple){         return apple.getWeight() > 150; //筛选大于150g的     } } public class AppleGreenColorPredicate implements ApplePredicate{     public boolean test(Apple apple){         return "green".equals(apple.getColor()); //绿色的     } }public static List filterApples(List inventory, ApplePredicate p){     List result = new ArrayList<>();     for(Apple apple: inventory){         if(p.test(apple)){             result.add(apple);         }     }     return result; }
  最终实现了行为参数化的fliterAppler方法看起来是不错的public class AppleHeavyWeightPredicate implements ApplePredicate{     public boolean test(Apple apple){         return apple.getWeight() > 150;     } } public class AppleGreenColorPredicate implements ApplePredicate{     public boolean test(Apple apple){         return "green".equals(apple.getColor());     } }  public class FilteringApples{     public static void main(String...args){     List inventory = Arrays.asList(new Apple(80,"green"),     new Apple(155, "green"),     new Apple(120, "red"));     List heavyApples =     filterApples(inventory, new AppleHeavyWeightPredicate());     List greenApples =     filterApples(inventory, new AppleGreenColorPredicate());     }     public static List filterApples(List inventory,     ApplePredicate p) {         List result = new ArrayList<>();         for (Apple apple : inventory){             if (p.test(apple)){                 result.add(apple);             }         }         return result;     } }
  可是每次都还需要定义一个实现类再实例化,看起来好像十分的啰嗦。Java有一个机制称为匿名类,它可以让你同时
  声明和实例化一个类。它可以帮助你进一步改善代码,让它变得更简洁。
  下面的代码展示了如何通过创建一个用匿名类实现ApplePredicate的对象,重写筛选的例子:List redApples = filterApples(inventory, new ApplePredicate() {     public boolean test(Apple apple){         return "red".equals(apple.getColor());     } });
  但是不得不说匿名类真的很笨重,很多冗余的模版代码,而且还会有this指针的问题
  引入Lambda我们可以做到这样子,避免了笨重了匿名类。List result = filterApples(inventory, (Apple apple) -> "red".equals(apple.getColor()));

上汽首款奥迪车型奥迪A7L先行版7月18日开启预订日前获悉,上汽奥迪A7L55TFSIquattro先行版将于7月18日开启预售,用户可以在上汽奥迪App上订购该车型,官方会设有1000个限量号码,首轮仅发布100个。新车详解在外阿斯顿马丁VantageDB11将电动化新车2025年将发布日前,我们从国外媒体获悉,下一代Vantage和DB11正在转向电动化,两者之间的新车型将是电气化的产物,新车预计在2025年发布。VantageF1特别版DB11在完全电动化前,全球最贵二手车?钻石版布加迪现身二手车市场,全球仅一台在全球有很多跑车都很出名,价格从几百万到几千万甚至上亿。而在这些跑车当中,布加迪威龙可以说是最顶级的跑车,最便宜的一辆也要2500万,在国内的数量不超过十辆,这样的车不是一般的土豪云市场巨头林立市值170亿的优刻得,亏损超3亿盈利堪忧文杨剑勇近年来,因各界积极利用人工智能等新技术驱动智能化转型,而云服务作为新技术输出窗口,受益于人工智能技术广泛应用,全球云服务呈现稳健增长态势。值得一提的是,在过去一年中,验证了AWS营收规模达454亿美元,亚马逊领跑全球云服务市场文杨剑勇云服务变得越来越主流,从远程办公到各种线上需求剧增,以及智能化浪潮如火如荼,带来了全球云服务市场依旧展现出强劲的增长。来自SynergyResearch发布的最新数据显示2玩完王朝系列到动物系列比亚迪海豚实车首发日前,比亚迪海豚正式完成工信部申报,新车即为比亚迪EA1的量产版,采用海洋美学设计理念,基于领先的e平台3。0打造,为新世代年轻用户而来,有望在三季度上市。新车详解新车是首款采用海为什么肯尼亚的进口汽车突然变得如此昂贵?Gadgetsafrica报道,如果你过去几个月一直在肯尼亚购买进口汽车,你肯定已经注意到这些以化石燃料为动力的地球毁灭者变得更加昂贵了。例如,曾经花费大约60万肯尼亚先令购买的马全年营收超千亿美元,华为手机受阻后将驶向何方?文杨剑勇尽管2020年遭遇严峻考验,但华为依旧交出一份靓丽的成绩单。来自第一财经独家获悉,根据华为内部财务系统统计,2020年总营收1367亿美元,增长11,利润99亿美元,增长超实现盈亏平衡!阿里云规模超500亿,云龙头地位进一步巩固文杨剑勇云服务变得越来越主流,从远程办公到各种线上需求剧增,以及智能化浪潮如火如荼,带来了全球云服务市场依旧展现出强劲的增长。根据权威调研机构Gartner数据显示,2021年,全我国智能音箱出货量将超4200万台,三强格局能否打破?文杨剑勇目前,在消费科技市场,智能音箱可以说是最热门智能硬件之一。继手机后,所有智能手机厂商均推出自家品牌智能音箱。不过,就市场格局来看,全球智能音箱领导厂商则是以亚马逊谷歌百度与市场超过亿美元!两大云巨头盈利,云服务行业迎来最好时期文杨剑勇近年来,在全球智能化大背景下,各界对云服务的需求剧增,带来全球云服务市场呈现蓬勃发展态势。尤其全球疫情冲击下,各行各业验证了云的价值,使得越来越多企业应用迁移部署在云端,推
浙江舟山出现一位神秘富豪,背靠奔驰和宝马,大赚112亿财富浙江舟山出现一位神秘富豪,背靠奔驰和宝马,大赚112亿财富推荐语现如今,在国内普通家庭中,拥有汽车代步已经不再是奢侈,而是一件稀疏平常的事情。多年来,随着汽车产销量的持续增长,也直真旗舰魅族18,综合实力小米11或也不行,魅友四百贵的值在前几天魅族正式发布了魅族18系列手机,魅族18系列手机在配置上还是相当强悍的,无论是标准版的魅族18还是超大杯版的魅族18pro。就是标准版的魅族18pro放在其他机型上都可以当iQOOZ3将于4月1日开售正式推出了全新的iQOOZ3机型,拥有骁龙768G的强悍性能55W的超快闪充和120Hz竞速屏等诸多亮点配置,号称性能先锋,一经发布便收获了用户的广泛关注。现在有最新消息,近日iQ千元机可享55W闪充iQOOZ3何以兼顾速度和安全近日iQOO正式发布了新款iQOOZ3。作为一款定价千元的入门机型,iQOOZ3搭载了骁龙768G处理器,在拥有一块120Hz竞速屏的同时还加入了6400万像素超清三摄,整体硬件配如何看待小米新Logo?对于有着几十年历史的企业来说,它们可能拥有数次更改品牌Logo的经历,而对于成立仅10年的小米来说,今年还是他们第一次真正意义上更改Logo。小米全新Logo当小米的新Logo公布广东惠州百亿富豪掌舵深圳地产龙头企业,身价100亿广东惠州百亿富豪掌舵深圳地产龙头企业,身价100亿推荐语惠州是国家历史文化名城,在隋唐时已是粤东重镇,至今1400多年,一直是东江流域经济军事文化中心和商品集散地。除此之外,惠州还江苏吸尘器大王打造国内清洁电器龙头企业,身价180亿推荐语随着我国家电行业技术升级和消费者需求的爆发,清洁电器行业迎来了全新机遇。根据奥维云网的数据,20152020年,中国清洁电器市场规模由76亿元增长至240亿元。凭借于此,业内传承东芝品质dynabookPortegeX50WJIntelIrisXe显示芯片,15。6吋防眩光屏幕,360度自由翻转,独立悬吊喇叭设计与杜比全景声,全方位接口连接哪一款笔记本电脑才能将这些吸睛品质一网打尽?3月17日,全新上市手机还要降价?高通5nm新品骁龙780G5G芯片登场高通公司今天公布了新款骁龙7系列处理器,命名为骁龙780G5G。该芯片通过三星5nmLPE工艺打造,这也是骁龙888所使用的工艺。骁龙780G5G芯片提供更好的AI性能更好的相机体如此多的手机,还都是配置均衡的中高端旗舰3月新机数量远超往年,如此多的手机,还都是配置均衡的中高端旗舰,让用户很难选择。其中想要买到喜欢的手机并不难,只要按照自己的要求进行筛选,还是能够买到好手机的。中端旗舰iQOONe新能源汽车黑马出现销量力压特斯拉和理想,3季度卖出20万辆新能源汽车界大佬出现力压特斯拉和理想,成为行业最大黑马推荐语我们都知道,燃油车的使用对空气的污染是比较大的。燃油汽车的污染主要是在城市道路上临近地面排放,其主要污染物是NOx烟尘,