当前位置:首页 » 《随便一记》 » 正文

Java中的Optional类_攻城狮Chova的博客

25 人参与  2022年05月03日 17:06  分类 : 《随便一记》  评论

点击全文阅读


Optional工具类

  • 基本概念
  • Optional类的使用
    • Optioanl对象创建
      • of
      • ofNullable
      • empty
  • Optional常用方法
    • isPresent
    • get
    • orElse
    • orElseGet
    • orElseThrow
    • map
    • flatMap
    • filter
    • ifPresent
    • ifPrsentOrElse
    • equals

基本概念

  • Optional类:
    • Optional是一个可以为null的容器对象.可以保存指定类型的值,也可以只保存null. 要么有值,要么为null
    • Optional中提供很多方法来避免显式的进行空值检查.如果值存在则调用isPresent() 方法会返回true, 调用get() 方法就会返回这个对象
    • Optional类是一个没有子类的工具类,很好的解决了空指针异常问题

Optional类的使用

  • Java 8以前,通常使用if…else… 对对象进行是否为空的判断,然后再进行逻辑处理,这样的代码非常冗余
  • Java 8中新增了Optional类,使用这个类可以避免空指针检查,使代码更加优雅

Optioanl对象创建

of

  • of() 方法不支持null对象
Optional.of(T t);

ofNullable

  • ofNullable() 方法支持null对象
Optional.ofNullable();

empty

  • empty() 方法可以直接创建一个空的Optional对象
Optional.empty();

Optional常用方法

isPresent

  • isPresent(): 判断是否包含值
    • 如果包含值则返回true
    • 如果不包含值则返回false
Optional<Object> optional = Optional.empty();
// false
boolean optionalPresent = optional.isPresent();

get

  • get(): 获取包含的值
    • 如果有值则返回这个值
    • 否则抛出NoSuchElementException: No value present异常
Optional<Object> optional = Optional.empty();
// NoSuchElementException: No value present
Object o = optional.get();

orElse

  • orElse(str): 如果调用对象包含值则返回这个值,否则返回参数字符串str
String message = optional.orElse("Optional对象的值为空!");

orElseGet

  • orElseGet(supplier): 如果调用对象包含值则返回这个值,否则返回Lambda表达式获取的值
  • orElseGet()orElse() 比较:
    • orElseGet()orElse() 类似,只是传递的参数类型不同
    • orElseGet() 的参数是Lambda类型
    • orElse() 的参数是String类型
String value = optional.orElseGet(() -> "Optional对象的值为空!");

orElseThrow

  • orElseThrow(exceptionSupplier): 如果调用对象包含值则返回这个值,否则抛出Lambda表达式中Supplier继承的异常
String value = optional.orElseThrow(() -> new RunTimeExeception("Optional对象中的值不存在!"));

map

  • map(): 如果调用的对象有值,则进行处理,并且返回处理后的Optional对象.否则返回Optional.empty()
  • Optional中的map() 方法和Stream流中的map() 方法类似,可以用于类型转换等操作
Optional<String> map = optional.map(p -> p.getName());

flatMap

  • flatMap(): 如果调用的对象有值,则执行mapping函数返回Optional类型的值.否则返回空Optional对象Optional.empty()
  • flatMap()map() 比较:
    • Optional中的flatMap()map() 方法类型,区别只是在于mapping的返回值不同
    • map() 方法的mapping函数返回值可以是任何类型的对象,在map() 方法返回之前会包装为Optional对象
    • flatMap() 方法的mapping函数调用对象必须是Optional对象,调用结束后 ,flatMap() 中不会对结果使用Optional进行封装
// map()方法
Optional<String> map = optional.map(p -> p.getName());

// flatMap()方法
Optional<String> flatMap = optional.flatMap(p -> Optional.of(p.getName()));

filter

  • filter(predicate): 通过传入的Predicate限定条件对Optional对象中的值进行过滤. 如果Optional对象中有值并且满足Predicate过滤条件,就返回包含这些值的Optional对象,否则返回空Optinal对象Optional.empty()
String filter = optional.filter(s -> s.length > 0).orElse("Optional对象中的值不存在!");

ifPresent

  • ifPresent(consumer): 如果调用的对象包含值则使用对象的值调用consumer处理.否则不进行任何操作
optional.ifPresent(System.out :: println);

ifPrsentOrElse

  • ifPresentOrElse(): Java 9以后的方法.如果调用的对象包含值则使用对象的值调用consumer.否则执行自定义的Runnable操作
optional.ifPresentOrElse((str) -> System.out.println(str.toUpperCase()), () -> System.out.println("Optional对象中的值不存在!"));

equals

  • equals(): 判断其余对象是否和Optional对象相等
boolean flag = optional.equals(obj);

点击全文阅读


本文链接:http://zhangshiyu.com/post/39423.html

对象  返回  调用  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 老公怀疑我怀的是智障,害我流产全文完结版阅读_[江亦林嫂许云夕]关键剧情节选解锁
  • 九幽不渡卿全书+后续+结局(孟卿卿谢昭远绮萝)_(九幽不渡卿全书+后续+结局)列表_笔趣阁(孟卿卿谢昭远绮萝)
  • 许我三千繁星愿结局+番外(楚砚风慕星眠)列表_许我三千繁星愿结局+番外(楚砚风慕星眠)结局篇+番外在线
  • (番外)+(全书)高冷男友化身舔狗,我不要了+后续+结局(沈星眠傅景淮)全书在线_高冷男友化身舔狗,我不要了+后续+结局免费列表_笔趣阁(沈星眠傅景淮)
  • (番外)+(全书)你是我难愈的旧伤结局+番外(傅深铭夏晚星)_(你是我难愈的旧伤结局+番外)列表_笔趣阁(傅深铭夏晚星)
  • 裴谨言桑年全书+结局+番外(裴谨言桑年全书+结局+番外)裴谨言桑年_裴谨言桑年列表_笔趣阁(裴谨言桑年全书+结局+番外)
  • (番外)+(全书)乔喜商凛乔雪眠全书+番外免费下载_(乔喜商凛乔雪眠)乔喜商凛乔雪眠全书+番外列表_笔趣阁(乔喜商凛乔雪眠)
  • 你是我未拆的遗书全书+后续+结局(桑年裴谨言)列表_你是我未拆的遗书全书+后续+结局(桑年裴谨言)全书+后续+结局在线
  • 也曾偷藏欢喜结局+番外免费(乔喜商凛)免费在线_乔喜商凛(也曾偷藏欢喜结局+番外)
  • 时光难缓故人散+后续+结局(夏颜兮傅瑾)结局_(夏颜兮傅瑾时光难缓故人散+后续+结局全书结局)结局列表_笔趣阁(夏颜兮傅瑾)
  • 尹若雪尹星野(梦断南风起,醒时皆成空结局+番外)_(尹若雪尹星野)列表_笔趣阁(梦断南风起,醒时皆成空结局+番外)
  • 「为了初恋女儿,丈夫拿走女儿大脑」后续完整大结局_楠楠顾望川周若后续已完结

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1