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

行为参数化使用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()));

见过180屏幕占比的手机吗?让你体验360度无死角玩手机今天我们讲解的这款手机是小米发布的一部有着180屏幕占比的手机他的代号叫阿尔法。这款手机他屏幕可以说是最为奇葩得了他不折叠屏还要奇葩,他正反面都是屏幕,连侧边也是环绕屏正真的做到了不做机器代理人,让思考重新归位导语机器因美观而受到崇拜,因创造动力而受到珍爱,因有危险而遭到痛恨,也因奴役人类而遭到厌恶。布拉塞尔现代是科技发达,网络遍地开花的时代。我们已经不需要思考太多的事情,便可以依靠科技四维时空中一切物体的运动速度都是光速!包括你我都以光速运动看到这个题目,很多人可能一头雾水我们怎么可能以光速运动呢?何况爱因斯坦的相对论早就表明,任何物体的运动速度都不可能达到超过光速。是不是一脸懵逼?不要惊讶,事实上却是如此,却是如题目比亚迪4月汽车销量公布比亚迪公布了乘用车在2022年4月份的销量数据,共计105475辆,同比增长136。5,DM车型销售48072辆,超级混动DMI,完全颠覆燃油汽车。EV车型销售57403辆,E平台SpringBoot整合ORM开发框架MyBatis和JPA1在使用Spring整合ORM组件的过程中,为了达到简化的目的,往往会进行大量的配置。利用SpringBoot可以进一步实现配置的简化。SpringBoot整合MyBatis开发框2022年最推荐的4款手机2022年最推荐的4款手机第一款iQOONeo5SiQOONeo5s采用6。62英寸的流光屏配有夜行空间日落峡谷橙光跃动三种颜色高度约163。34毫米,宽度约76。37毫米,厚度约建议明年才换手机?三星UFS4。0闪存终于面世,带来3大关键提升数码圈普遍认同一点,全面屏高刷5G百瓦快充的浪潮过后,智能手机的发展已经陷入了停滞期。不知道你会不会也有同样的感受我们好像已经什么都不缺,也什么都不想买。举个例子,前两年旗舰手机努小米大跳水,120W快充屏下摄像头,不到一年官方直降1600元现在的智能手机,不仅更新换代很快,而且降价速度也是十分快的,骁龙8Gen1手机才发布没几个月,目前有关于骁龙8Gen1Plus处理器的消息也是越来越多了,据悉该芯片同样会采用4nmiPhone14ProMax机模上手,这摄像头也没谁了整体智能手机行业销量下滑,安卓日子一点都不好过,相对来讲苹果的日子越来越好过了。大家对于iPhone14系列的期待值越来越高了,这完全是由于安卓阵营近三年毫无长进,除了堆硬件也玩不共享单车退役后,居然放到了这些地方七年前,共享单车从北京上海等一线城市,一路覆盖到四五线小城,不到一年的时间,在全国就已经遍地开花,如果用一个词来形容当时的盛况,可能更恰当的一个词就是后来的单车坟场。单车坟场在20拜登称他将确保美国在与中国的竞争中继续在技术领域处于强势地位据塔斯社5月4日报道,美国总统拜登5月3日在五角大楼最大的承包商之一洛克希德马丁公司的工厂发表讲话时说我决心确保美国在与其他国家,尤其是中国的竞争方面,继续在技术领域处于强势地位。
佳能的颜色真的比索尼好吗?我是摄影领域达人马克莱恩,很高兴和您分享这十年我对摄影的经验与感悟,希望得到您的认可。佳能的颜色真的比索尼好吗?(左索尼A7R3适马50mmf1。4Art右佳能EOS5DSR适马5双11销售8894亿后,传统电商的时代将结束,取而代之的是兴趣电商即便在今年双11天猫销售了5403亿,京东销售了3491亿,也无法阻挡传统电商时代的结束。1hr今年双11两大电商巨头总计销售了8894亿,可有多少水分多少人在赔本卖吆喝,在120对话元气森林唐彬森富翁海盗与产品经理看三种迥异的特质如何在他身上合而为一。文宋玮黎诗韵黄俊杰编辑黄俊杰连续创业者唐彬森在互联网圈摸爬滚打十年,赚过大钱,但没有获得和赚钱能力相匹配的名声。2016年,他一脚踏入饮料行业对比杭州,南京拉胯,知名互联网公司为何那么少?南京本身经济就没什么活力,一大帮国企靠着政策垄断吃饭,其实做的都是没用多少技术含量的事,至于互联网公司,南京的软件公司一种是搞华为外包的,一种就是搞政企项目其实就是做政府信息化外包想买一台带独显的电脑,但不怎么打游戏,只是想看看文档学习,医学生,有什么推荐的么,小米小新华为啥的?小新Pro2021系列,CPU为AMDR75800H,自带的核显vega8足够强大,医学生足够使了!不怎么打游戏,不挖矿,独显没有必要,荣耀Magicbook14即可胜任。我想买台苹果FaceID新专利可存储使用者不同造型,针对近视远视用户优化显示财经网科技11月15日讯,据IT之家消息,苹果公司一项发明专利被公开,专利编号为20210350769。该专利展现FaceID人脸识别技术手机显示屏校正技术等一系列新功能。Face最大隐患华为跌倒后,苹果是该有个竞争对手了撰文AI财经社麻策编辑赵艳秋iPhone13又卖爆了。一名手机线上经销商告诉AI财经社,iPhone13系列目前供不应求,而且是越高配的版本越缺货。所有人都在找货,身边不少朋友都在一直藏着掖着的AppleCar,居然被人偷偷用苹果专利做了出来汽车不过是四个轮子的iPhone,我们既然能造iPhone,为什么就不能造电动车?富士康母公司鸿海集团创始人郭台铭曾在多个场合表达这一观点。但我认为,这句话放在苹果身上可能会更加合从5499元跌至3964元,苹果A13IP68防水,经典iPhone重回低价快速发布新机是手机厂商们抢占市场份额最好用的办法,许多国产手机品牌2021年发布新机的速度都比往年更快了,例如小米公司原本一年一更新的RedmiNote系列,如今直接变成了半年一更苹果M1M1ProM1Max之间有何不同?2020年,苹果推出的M1芯片成为了一大话题,而在2021年10月,新款MacBookPro搭载了M1Pro芯片和M1Max芯片,在本文中,我将说明苹果M1M1ProM1Max之间为什么很多夫妻中,男的一般都是用国产手机,女的用苹果手机?不完全是钱的问题,说一下我的经历。若干年前有次深夜去会所接朋友,目睹一群下班的小姐在等车,坐在沙发上一排低头玩手机。清一色的最新款iphone5s另一次,和朋友接洽,有一干练的女强