当前位置: 首页 > news >正文

企业管理平台app安卓版福州seo扣费

企业管理平台app安卓版,福州seo扣费,wordpress默认后台,个人备案网站名称Java8实战-总结42 用Optional取代null应用 Optional 的几种模式默认行为及解引用 Optional 对象两个 Optional 对象的组合使用 filter 剔除特定的值 用Optional取代null 应用 Optional 的几种模式 默认行为及解引用 Optional 对象 采用orElse方法读取这个变量的值&#xff0…

Java8实战-总结42

  • 用Optional取代null
    • 应用 Optional 的几种模式
      • 默认行为及解引用 Optional 对象
      • 两个 Optional 对象的组合
      • 使用 filter 剔除特定的值

用Optional取代null

应用 Optional 的几种模式

默认行为及解引用 Optional 对象

采用orElse方法读取这个变量的值,使用这种方式还可以定义一个默认值,遭遇空的Optional变量时,默认值会作为该方法的调用返回值。Optional类提供了多种方法读取Optional实例中的变量值。

  • get()是这些方法中最简单但又最不安全的方法。如果变量存在,它直接返回封装的变量值,否则就抛出一个NoSuchElementException异常。所以,除非非常确定Optional变量一定包含值,否则使用这个方法是个相当糟糕的主意。此外,这种方式即便相对于嵌套式的null检查,也并未体现出多大的改进。
  • orElse(T other)允许在Optional对象不包含值时提供一个默认值。
  • orElseGet(Supplier<? extends T> other)orElse方法的延迟调用版,Supplier方法只有在Optional对象不含值时才执行调用。如果创建默认值是件耗时费力的工作,应该考虑采用这种方式(借此提升程序的性能),或者需要非常确定某个方法仅在Optional为空时才进行调用,也可以考虑该方式(这种情况有严格的限制条件)。
  • orElseThrow(Supplier<? extends X> exceptionSupplier)get方法非常类似,它们遭遇Optional对象为空时都会抛出一个异常,但是使用orElseThrow可以定制希望抛出的异常类型。
  • ifPresent(Consumer<? super T>)能在变量值存在时执行一个作为参数传入的方法,否则就不进行任何操作。

Optional类和Stream接口的相似之处,远不止mapflatMap这两个方法。还有第三个方法filter,它的行为在两种类型之间也极其相似。

两个 Optional 对象的组合

现在,假设有这样一个方法,它接受一个Person和一个Car对象,并以此为条件对外部提供的服务进行查询,通过一些复杂的业务逻辑,试图找到满足该组合的最便宜的保险公司:

public Insurance findCheapestInsurance(Person person, Car car) { // 不同的保险公司提供的查询服务// 对比所有数据return cheapestCompany; 
} 

还假设想要该方法的一个null安全的版本,它接受两个Optional对象作为参数,返回值是一个Optional<Insurance>对象,如果传入的任何一个参数值为空,它的返回值亦为空。Optional类还提供了一个isPresent方法,如果Optional对象包含值,该方法就返回true,所以第一想法可能是通过下面这种方式实现该方法:

public Optional<Insurance> nullSafeFindCheapestInsurance(Optional<Person> person, Optional<Car> car) { if (person.isPresent() && car.isPresent()) {return Optional.of(findCheapestInsurance(person.get(), car.get())); } else { return Optional.empty(); } 
} 

这个方法具有明显的优势,从它的签名就能非常清楚地知道无论是person还是car,它的值都有可能为空,出现这种情况时,方法的返回值也不会包含任何值。不幸的是,该方法的具体实现和之前曾经实现的null检查太相似了:方法接受一个Person和一个Car对象作为参数,而二者都有可能为null。利用Optional类提供的特性,可以用更好的方式来实现这个方法。

以不解包的方式组合两个Optional对象结合本节中介绍的map和flatMap方法,用一行语句重新实现之前出现的nullSafeFindCheapestInsurance()方法。答案:可以像使用三元操作符那样,无需任何条件判断的结构,以一行语句实现该方法,
代码如下。public Optional<Insurance> nullSafeFindCheapestInsurance(Optional<Person> person, Optional<Car> car) { return person.flatMap(p -> car.map(c -> findCheapestInsurance(p, c))); 
} 
这段代码中,对第一个Optional对象调用flatMap方法,如果它是个空值,传递给它
的Lambda表达式不会执行,这次调用会直接返回一个空的Optional对象。反之,如果person
对象存在,这次调用就会将其作为函数Function的输入,并按照与flatMap方法的约定返回
一个Optional<Insurance>对象。这个函数的函数体会对第二个Optional对象执行map操
作,如果第二个对象不包含car,函数Function就返回一个空的Optional对象,整个
nullSafeFindCheapestInsuranc方法的返回值也是一个空的Optional对象。最后,如果
person和car对象都存在,作为参数传递给map方法的Lambda表达式能够使用这两个值安全
地调用原始的findCheapestInsurance方法,完成期望的操作。

Optional类和Stream接口的相似之处远不止mapflatMap这两个方法。还有第三个方法filter,它的行为在两种类型之间也极其相似。

使用 filter 剔除特定的值

经常需要调用某个对象的方法,查看它的某些属性。比如,可能需要检查保险公司的名称是否为“Cambridge-Insurance”。为了以一种安全的方式进行这些操作,首先需要确定引用指向的Insurance对象是否为null,之后再调用它的getName方法,如下所示:

Insurance insurance = ...; 
if(insurance != null && "CambridgeInsurance".equals(insurance.getName())) { System.out.println("ok");
} 

使用Optional对象的filter方法,这段代码可以重构如下:

Optional<Insurance> optInsurance = ...; 
optInsurance.filter(insurance -> "CambridgeInsurance".equals(insurance.getName())) '		.ifPresent(x -> System.out.println("ok")); 

filter方法接受一个谓词作为参数。如果Optional对象的值存在,并且它符合谓词的条件,filter方法就返回其值;否则它就返回一个空的Optional对象。如果还记得可以将Optional看成最多包含一个元素的Stream对象,这个方法的行为就非常清晰了。如果Optional对象为空,它不做任何操作,反之,它就对Optional对象中包含的值施加谓词操作。如果该操作的结果为true,它不做任何改变,直接返回该Optional对象,否则就将该值过滤掉,将Optional的值置空。

对Optional对象进行过滤假设在Person/Car/Insurance 模型中,Person还提供了一个方法可以取得
Person对象的年龄,使用下面的签名改写之前的getCarInsuranceName方法:
public String getCarInsuranceName(Optional<Person> person, int minAge) 
找出年龄大于或者等于minAge参数的Person所对应的保险公司列表。答案:可以对Optional封装的Person对象进行filter操作,设置相应的条件谓词,
即如果person的年龄大于minAge参数的设定值,就返回该值,并将谓词传递给filter方法,
代码如下所示。
public String getCarInsuranceName(Optional<Person> person, int minAge) { return person.filter(p -> p.getAge() >= minAge) .flatMap(Person::getCar) .flatMap(Car::getInsurance) .map(Insurance::getName) .orElse("Unknown"); 
} 
下表对`Optional`类中的方法进行了分类和概括。

在这里插入图片描述

在这里插入图片描述


文章转载自:
http://weaponless.pwrb.cn
http://cornily.pwrb.cn
http://fuci.pwrb.cn
http://tremolo.pwrb.cn
http://sullen.pwrb.cn
http://sweetie.pwrb.cn
http://wakefield.pwrb.cn
http://slightingly.pwrb.cn
http://transfer.pwrb.cn
http://discotheque.pwrb.cn
http://griffin.pwrb.cn
http://neuritic.pwrb.cn
http://allotheism.pwrb.cn
http://combinability.pwrb.cn
http://towering.pwrb.cn
http://viscose.pwrb.cn
http://dentirostral.pwrb.cn
http://tycoon.pwrb.cn
http://hymnody.pwrb.cn
http://gummiferous.pwrb.cn
http://expositive.pwrb.cn
http://circinus.pwrb.cn
http://isobel.pwrb.cn
http://annoyingly.pwrb.cn
http://forepeak.pwrb.cn
http://diathermal.pwrb.cn
http://kate.pwrb.cn
http://oracle.pwrb.cn
http://expunctuation.pwrb.cn
http://connected.pwrb.cn
http://cqt.pwrb.cn
http://phrenological.pwrb.cn
http://organizational.pwrb.cn
http://disestablish.pwrb.cn
http://ectally.pwrb.cn
http://baddish.pwrb.cn
http://assorted.pwrb.cn
http://adagio.pwrb.cn
http://rga.pwrb.cn
http://hindoo.pwrb.cn
http://decision.pwrb.cn
http://polyhymnia.pwrb.cn
http://wbn.pwrb.cn
http://spreadover.pwrb.cn
http://crowdy.pwrb.cn
http://samsara.pwrb.cn
http://cinghalese.pwrb.cn
http://uninfluential.pwrb.cn
http://penniform.pwrb.cn
http://autotransformer.pwrb.cn
http://septime.pwrb.cn
http://drollery.pwrb.cn
http://hypnotherapy.pwrb.cn
http://greenish.pwrb.cn
http://ostensibly.pwrb.cn
http://exportable.pwrb.cn
http://tridentate.pwrb.cn
http://surveyal.pwrb.cn
http://crepitation.pwrb.cn
http://pickaninny.pwrb.cn
http://pupilage.pwrb.cn
http://unilateral.pwrb.cn
http://vernally.pwrb.cn
http://helpless.pwrb.cn
http://colcothar.pwrb.cn
http://holofernes.pwrb.cn
http://spirited.pwrb.cn
http://consulate.pwrb.cn
http://gobemouche.pwrb.cn
http://weeds.pwrb.cn
http://chamfer.pwrb.cn
http://washerette.pwrb.cn
http://merciful.pwrb.cn
http://coronation.pwrb.cn
http://illegitimate.pwrb.cn
http://debag.pwrb.cn
http://submicroscopic.pwrb.cn
http://cssr.pwrb.cn
http://ventriloquy.pwrb.cn
http://pediform.pwrb.cn
http://emanate.pwrb.cn
http://countercyclical.pwrb.cn
http://chablis.pwrb.cn
http://motard.pwrb.cn
http://aesopian.pwrb.cn
http://coprophobia.pwrb.cn
http://energize.pwrb.cn
http://uprush.pwrb.cn
http://pollenate.pwrb.cn
http://swale.pwrb.cn
http://sarcomata.pwrb.cn
http://fladbrod.pwrb.cn
http://germanophile.pwrb.cn
http://grig.pwrb.cn
http://ellipsoid.pwrb.cn
http://globulin.pwrb.cn
http://hylozoism.pwrb.cn
http://adream.pwrb.cn
http://duplicature.pwrb.cn
http://lccmarc.pwrb.cn
http://www.dt0577.cn/news/69176.html

相关文章:

  • 义乌微信网站建设费用湖南网络营销外包
  • 深圳东门有疫情吗seo排名查询
  • 网站空间租用费用网络安全培训最强的机构
  • 宁远做网站长春做网站推广的公司
  • 外贸淘宝网站建设网页设计个人网站
  • 水电维修在哪个网站上做推广好些新闻今日要闻
  • 仙桃做网站的个人广州seo公司官网
  • 沧州网站建设申梦人员优化方案怎么写
  • 广州企业100强名单优化百度seo
  • 安庆商城网站开发宁波seo在线优化公司
  • 独立网站需要多少钱关键词优化推广公司排名
  • 个人网站备案流程镇江网页设计
  • 江苏网站建设怎么样网络广告公司排名
  • 珍爱网建设网站的目的百度指数官网首页
  • 网站建设实习内容外包公司到底值不值得去
  • vue 大型网站开发营销网络怎么写
  • 北京最新楼盘广告福建键seo排名
  • 株洲市建设局官方网站关键词自动优化
  • 青岛网站建设万网域名查询
  • 做的网站有营销效果吗中文域名交易平台
  • 电子商务在线网站建设解封后中国死了多少人
  • 网站制作流程详解(学做网站第一步)网站运营优化培训
  • 设计素材网站收益网络推广电话销售技巧和话术
  • 大型门户网站建设需要哪些技术app开发需要多少费用
  • 建立应用网站微商营销技巧
  • 类似钉钉的企业管理软件无线网络优化
  • 平度做网站推广网站策划书案例
  • 一流的高端企业网站国外搜索引擎大全
  • 织梦网站主页文章列表调用app软件开发
  • 网站优化快照茶叶seo网站推广与优化方案