还在用if(obj!=)做非空判断?带你快速上手Optional实战性理解( 二 )


Person person=new Person;person.setAge(2);Optional.ofable(person).get;复制代码2.3 Optional.isPresent方法(判读是否为空)isPresent方法就是会返回一个boolean类型值 , 如果对象不为空则为真 , 如果为空则false源码:
public boolean isPresent {return value != ;}复制代码简单的实例展示:
Person person=new Person;person.setAge(2);if (Optional.ofable(person).isPresent){//写不为空的逻辑System.out.println("不为空");}else{//写为空的逻辑System.out.println("为空");}复制代码2.4 Optional.ifPresent方法(判读是否为空并返回函数)
这个意思是如果对象非空 , 则运行函数体源码:
public void ifPresent(Consumer consumer) {//如果value不为空 , 则运行accept方法体if (value != )consumer.accept(value);}复制代码看实例:
Person person=new Person;person.setAge(2);Optional.ofable(person).ifPresent(p -> System.out.println("年龄"+p.getAge));复制代码【还在用if(obj!=)做非空判断?带你快速上手Optional实战性理解】如果对象不为空 , 则会打印这个年龄 , 因为内部已经做了NPE(非空判断) , 所以就不用担心空指针异常了
2.5 Optional.filter方法(过滤对象)filter方法大致意思是 , 接受一个对象 , 然后对他进行条件过滤 , 如果条件符合则返回Optional对象本身 , 如果不符合则返回空Optional源码:
public Optional filter(Predicate predicate) {Objects.requireNon(predicate);//如果为空直接返回thisif (!isPresent)return this;else//判断返回本身还是空Optionalreturn predicate.test(value) ? this : empty;}复制代码简单实例:
Person person=new Person;person.setAge(2);Optional.ofable(person).filter(p -> p.getAge>50);复制代码2.6 Optional.map方法(对象进行二次包装)map方法将对应Funcation函数式接口中的对象 , 进行二次运算 , 封装成新的对象然后返回在Optional中源码:
public Optional map(Function mapper) {Objects.requireNon(mapper);//如果为空返回自己if (!isPresent)return empty;else {//否则返回用方法修饰过的Optionalreturn Optional.ofable(mapper.apply(value));}}复制代码实例展示:
Person person1=new Person;person.setAge(2);String optName = Optional.ofable(person).map(p -> person.getName).orElse("name为空");复制代码2.7 Optional.flatMap方法(Optional对象进行二次包装)
map方法将对应Optional< Funcation >函数式接口中的对象 , 进行二次运算 , 封装成新的对象然后返回在Optional中源码:
public Optional flatMap(Function> mapper) {Objects.requireNon(mapper);if (!isPresent)return empty;else {return Objects.requireNon(mapper.apply(value));}}复制代码实例:
Person person=new Person;person.setAge(2);Optional optName = Optional.ofable(person).map(p -> Optional.ofable(p.getName).orElse("name为空"));复制代码2.8 Optional.orElse方法(为空返回对象)常用方法之一 , 这个方法意思是如果包装对象为空的话 , 就执行orElse方法里的value , 如果非空 , 则返回写入对象源码:
public T orElse(T other) {//如果非空 , 返回value , 如果为空 , 返回otherreturn value != ? value : other;}复制代码实例:
Person person1=new Person;person.setAge(2);Optional.ofable(person).orElse(new Person("小明", 2));复制代码2.9 Optional.orElseGet方法(为空返回Supplier对象)
这个与orElse很相似 , 入参不一样 , 入参为Supplier对象 , 为空返回传入对象的.get方法 , 如果非空则返回当前对象源码:
public T orElseGet(Supplier other) {return value != ? value : other.get;}复制代码实例:
Optional> sup=Optional.ofable(Person::new);//调用get方法 , 此时才会调用对象的构造方法 , 即获得到真正对象Optional.ofable(person).orElseGet(sup.get);复制代码说真的对于Supplier对象我也懵逼了一下 , 去网上简单查阅才得知 Supplier也是创建对象的一种方式,简单来说 , Suppiler是一个接口 , 是类似Spring的懒加载 , 声明之后并不会占用内存 , 只有执行了get方法之后 , 才会调用构造方法创建出对象 创建对象的语法的话就是Supplier supPerson= Person::new;需要使用时supPerson.get即可
2.10 Optional.orElseThrow方法(为空返回异常)
这个我个人在实战中也经常用到这个方法 , 方法作用的话就是如果为空 , 就抛出你定义的异常 , 如果不为空返回当前对象 , 在实战中所有异常肯定是要处理好的 , 为了代码的可读性源码:
public