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)

 

原文地址:https://www.cnblogs.com/zq1003/p/15530074.html