简要说明

开发过程中 经常会对 参数对象 判空:这里仅仅针对通过Stream流获取到的对象为空场景的处理

案例参考

orElse

  1. Long nativeLangId = basicCountryLanguageDoList.stream().filter(c -> c.getNativeLanguage().equals(YesOrNoEnum.YES.code())).findFirst().orElse(new BasicCountryLanguageDO()).getLanguageId();

�orElseGet【推荐】

  1. Long universalLangId = basicCountryLanguageDoList.stream().filter(c -> c.getUniversalLanguage().equals(YesOrNoEnum.YES.code())).findFirst().orElseGet(BasicCountryLanguageDO::new).getLanguageId();

怎么理解

相同点

都是为了处理 获取不到对象的场景。

不同点

orElse:不论通过stream流 获取到的对象是否为null 都会执行orElse()里的方法,也就是去创建对象
orElseGet:而orElseGet() 只会在前面获取的对象为null的时候,才会执行。

优点:

orElseGet:不会产生额外的对象

缺点:

orElseGet:语法写起来较为复杂了些。
orElse:产生额外的对象