美文网首页
Java Optional 类

Java Optional 类

作者: Tinyspot | 来源:发表于2022-08-22 09:38 被阅读0次

    改善代码可读性

    • 重构代码,用Lambda表达式取代匿名类;
    • 用方法引用重构Lambda表达式;
    • 用Stream API重构命令式的数据处理

    Optional 容器类

    • 主要解决空指针异常
    • 防御式检查:
      • 深层质疑
      • 过多的退出语句

    2.1 常用方法

    • Optional.of(T t) : 创建 Optional 实例
    • Optional.empty() : 创建一个空的 Optional 实例
    • Optional.ofNullable(T t) : 若 t 不为 null,创建 Optional 实例;否则创建空实例
    • orElse(T t) : 如果有值则返回该值,否则返回 t
    • orElseGet(Supplier s) : 如果调用对象包含值,返回该值,否则返回 s 获取的值
    • Optional<T> filter(Predicate<? super T> predicate)
    • map(Function f) : 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
    • flatMap(Function mapper) : 与 map 类似,要求返回值必须是Optional
    public final class Optional<T> {
        public boolean isPresent() {
            return value != null;
        }
    
        // If a value is present, invoke the specified consumer with the value, otherwise do nothing
        public void ifPresent(Consumer<? super T> consumer) {
            if (value != null)
                consumer.accept(value);
        }
    
        // 若为 null, of(...) 会抛出 NullPointerException
        public static <T> Optional<T> ofNullable(T value) {
            return value == null ? empty() : of(value);
        }
    }
    
    List<OrderItem> list = null;
    Optional.ofNullable(list)
                  .ifPresent(orderItems -> orderItems.forEach(orderItem -> System.out.println(1)));
    

    判空写法:Optional.ofNullable(变量).orElse(默认数值);

    List<OrderItem> list = null;
    Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(orderItem -> System.out.println(1));
    
    Child child = new Child(20, "tinyspot");
    return Optional.ofNullable(child)
            .map(Child::getAge)
            .filter(age -> age > 15)
            .filter(age -> age < 25)
            .isPresent();
    

    相关文章

      网友评论

          本文标题:Java Optional 类

          本文链接:https://www.haomeiwen.com/subject/xchfjrtx.html