zoukankan      html  css  js  c++  java
  • JAVA8 Optional类记录

    Optional 

    属于 java.util 包,是一个工具类。

    具体是判断是否为null,优化空指针的写法,更为优雅的写法。

    API

    1 是否存在

      ofNullable   空返回empty

      of                 空返回异常

    最初始的操作,都是判空。

    区别:

    1. ofNullable 为空返回empty
    2. of为空 返回异常

    of 源码:

     ofNullable 源码:

     实验: 

    2  判空操作

    isPresent     返回布尔值

    ifPresent(Consumer<? super T> consumer)  返回操作

    orElse(T other)      返回操作

    orElseGet(Supplier<? extends T> other)   返回操作

    orElseThrow(Supplier<? extends X> exceptionSupplier)  返回异常

    一般判空都是要进行下一步操作,三个常用的or和两个Present。

    像往常一样的判空操作,就能优雅的表达出来。

     2.1 ispresent

    实验:

    2.2 ifpresent  需要方法操作可以用这个

    2.2 orElseGet 与 orElse

    实验:

     结果:

    orElse  orelseGet  区别

        1 不管是否为null ,orElse 都会调用方法 但是某些时候方法没生效

    方法沒生效是因为:

     不为空返回 value 原来的,空就返回 other ,就是 管不管为不为空,都会执行方法,再根据value在取值。

        2  orelseGet  只在Null 的 才会调方法

    原理:orElse和orElseGet作用都是返回缺省值,并且无论present是否为空它们肯定是会被调用的,他们的关键区别在于一个是饿汉式,一个是懒汉式。orElse是无论present是否为空,缺省值都会被加载到内存(在高并发下慎用)。orElseGet是仅当present为空时,将缺省值加载到内存。

    所以一般情况下,用orwlseGet会更好。

    2.3  这些应该与stream 的api类似吧 (以后在做验证)

    filter(Predicate<? super T> predicate)      过滤

    map(Function<? super T, ? extends U> mapper)  map

    flatMap(Function<? super T, Optional<U>> mapper)

     

  • 相关阅读:
    NaN数值类型
    模板字符串
    一文带你速懂虚拟化KVM和XEN
    CentOS 8配置本地yum源及DNF简介
    fxksmdb.exe 是什么进程?
    入行IT,一定要会Linux吗?
    干货|Linux平台搭建网关服务器
    忘带U盘了??别急!一行python代码即可搞定文件传输
    手把手教你如何搭建一个私有云盘
    误删重要文件怎么办?学会Linux 救援模式再也不担心
  • 原文地址:https://www.cnblogs.com/zq1003/p/15530074.html
Copyright © 2011-2022 走看看