• Optional


    前言

    1. Java8新增的Option类本质上类似于异常检查,迫使API用户关注/处理Option类中是否包含内容,从而避免因为null值检查而导致的潜在隐患;

    2. Option不支持序列化,并且要尽量避免将Optional用于类属性方法参数集合元素。这三种情况可以用null值代替,没必要用Option;

    3. Option本身为引用类型,大量使用在一定程度上会影响JVM的堆内存和垃圾回收;

    4. 避免使用Optional的 equals()、hashCode()、==方法;参见这里

    API介绍1.8

    构造函数

    Optional的构造函数是私有的,不能由外部调用(不能new)

    static <T> Optional<T> of(T value) 

    如果value参数为空,会报NPE异常,一般不用;

    static <T> Optional<T> ofNullable(T value)

    如果value参数为空,会报No value present异常;

    boolean isPresent()

    判断Option中是否有元素;

    void ifPresent(Consumer<? super T> consumer)

    如果Optional有元素,就消费;方法中的参数Consumer为函数式接口

    T get()

     获取Option中的元素,一定要配合isPresent()方法使用;

    T orElse(T other)

    无论Optional容器是null还是non-null,都会执行orElse里的方法,如果Option容器为空,则将参数中的value放在Optional容器,否则不放;

    orElseGet(Supplier other)

    只有Optional容器为null,才会执行orElse里的方法,方法中的参数Supplier为函数式接口,该接口默认抽象get方法参数为空;

    T orElseThrow(Supplier  exception) throws X

    只有Optional容器为null,才会执行orElseThrow的方法,方法中的参数Supplier为函数式接口,该接口默认抽象get方法参数为空;

    Optional<T> filter(Predicate  predicate)

    针对Optional容器里的元素进行过滤,方法中的参数Predicate为函数式接口,该接口默认方法为test(T t);

    <U> Optional<U> map(Function mapper)

    针对Option中的元素进行运算,如下:Optional容器中维护了一个List,List中存放Apple,目的是将Apple重量大于150的苹果记录;

    <U> Optional<U> flatMap(Function mapper)

  • 相关阅读:
    顺序容器2(用法)
    运算符重载
    IO相关3(string流)
    IO相关2(文件输入输出)
    C语言--指针
    Java---匿名类
    Andriod开发 --插件安装、环境配置、问题集锦
    ubuntu--vim 技巧
    ubuntu--命令大全
    各浏览器userAgent汇总
  • 原文地址:https://www.cnblogs.com/oxygenG/p/12594204.html
Copyright © 2020-2023  润新知