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)

     

  • 相关阅读:
    建立一个能持续处理的C/S网络程序
    建立一个可以不停地接收客户端新的连接,但不能处理复杂的业务的C/S网络程序
    归并排序
    堆排序
    计数排序
    不要在PHP7中踩这些坑
    关于生活学习
    topthink/think-swoole 扩展包的使用 之 WebSocket
    PHP 三元运算符
    topthink/think-swoole 扩展包的使用 之 Task
  • 原文地址:https://www.cnblogs.com/zq1003/p/15530074.html
Copyright © 2011-2022 走看看