Package org.miaixz.bus.core.lang
Class Optional<T>
java.lang.Object
org.miaixz.bus.core.lang.Optional<T>
- Type Parameters:
T- 包裹里元素的类型
复制jdk16中的Optional,以及进行了一点调整和新增,比jdk8中的Optional多了几个实用的函数
- Since:
- Java 17+
- Author:
- Kimi Liu
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionstatic <T> Optional<T> empty()返回一个空的Optionalboolean判断传入参数是否与Optional相等 在以下情况下返回true 它也是一个Optional并且 它们包裹住的元素都为空 或者 它们包裹住的元素之间相互equals()exceptionOrElse(T other) 异常则返回另一个可选值判断包裹里的值存在并且与给定的条件是否满足 (Predicate.test(T)执行结果是否为true) 如果满足条件则返回本身 不满足条件或者元素本身为空时返回一个返回一个空的Optional<U> Optional<U> 如果包裹里的值存在,就执行传入的操作(Function.apply(T))并返回该操作返回值 如果不存在,返回一个空的Optional和map(java.util.function.Function<? super T, ? extends U>)的区别为 传入的操作返回值必须为 Optional<U> Optional<U> flattedMap(Function<? super T, ? extends Optional<? extends U>> mapper) 如果包裹里的值存在,就执行传入的操作(Function.apply(T))并返回该操作返回值 如果不存在,返回一个空的Optional和map(java.util.function.Function<? super T, ? extends U>)的区别为 传入的操作返回值必须为Optionalget()返回包裹里的元素,取不到则为null,注意!!!此处和Optional.get()不同的一点是本方法并不会抛出NoSuchElementException如果元素为空,则返回null,如果需要一个绝对不能为null的值,则使用orElseThrow()获取异常 当调用ofTry(SupplierX)时,异常信息不会抛出,而是保存,调用此方法获取抛出的异常inthashCode()如果包裹内元素为空,则返回0,否则返回元素的hashcode如果包裹内容失败了,则执行传入的操作(Consumer.accept(T))如果包裹内容失败了,同时是指定的异常执行传入的操作(Consumer.accept(T))如果包裹里的值存在,就执行传入的操作(Consumer.accept(T))booleanisEmpty()判断包裹里元素的值是否不存在,不存在为true,否则为falsebooleanisFail()是否失败 当调用ofTry(SupplierX)时,抛出异常则表示失败boolean判断包裹里元素的值是否存在,存在为true,否则为false<U> Optional<U> static <T> Optional<T> 根据Optional构造Optionalstatic <T> Optional<T> of(T value) 返回一个包裹里元素不可能为空的Optionalstatic <T extends CharSequence>
Optional<T> ofBlankAble(T value) 返回一个包裹里元素可能为空的Optional,额外判断了空字符串的情况static <T,R extends Collection<T>>
Optional<R> ofEmptyAble(R value) 返回一个包裹里List集合可能为空的Optional,额外判断了集合内元素为空的情况static <T> Optional<T> ofNullable(T value) 返回一个包裹里元素可能为空的Optionalstatic <T> Optional<T> 如果包裹里元素的值存在,就返回本身,如果不存在,则使用传入的操作执行后获得的Optional如果包裹里元素的值存在,则返回该值,否则返回传入的other如果包裹里元素的值存在,则返回该值,否则返回传入的操作执行后的返回值如果包裹里元素的值存在,则返回该值,否则返回传入的操作执行后的返回值如果包裹里元素的值存在,则返回该值,否则执行传入的操作如果包裹里的值存在,则返回该值,否则抛出NoSuchElementExceptionorElseThrow(Supplier<? extends X> exceptionSupplier) 如果包裹里的值存在,则返回该值,否则执行传入的操作,获取异常类型的返回值并抛出如果包裹里元素的值存在,就执行对应的操作,并返回本身 如果不存在,返回一个空的Optional如果包裹里元素的值存在,就执行对应的操作集,并返回本身 如果不存在,返回一个空的Optionalstream()转换为EasyStream对象转换为Optional对象toString()返回包裹内元素调用toString()的结果,不存在则返回null
-
Method Details
-
empty
返回一个空的Optional- Type Parameters:
T- 包裹里元素的类型- Returns:
- Optional
-
of
返回一个包裹里元素不可能为空的Optional- Type Parameters:
T- 包裹里元素的类型- Parameters:
value- 包裹里的元素- Returns:
- 一个包裹里元素不可能为空的
Optional - Throws:
NullPointerException- 如果传入的元素为空,抛出NPE
-
ofNullable
返回一个包裹里元素可能为空的Optional- Type Parameters:
T- 包裹里元素的类型- Parameters:
value- 传入需要包裹的元素- Returns:
- 一个包裹里元素可能为空的
Optional
-
ofBlankAble
返回一个包裹里元素可能为空的Optional,额外判断了空字符串的情况- Type Parameters:
T- 字符串类型- Parameters:
value- 传入需要包裹的元素- Returns:
- 一个包裹里元素可能为空,或者为空字符串的
Optional
-
ofEmptyAble
返回一个包裹里List集合可能为空的Optional,额外判断了集合内元素为空的情况- Type Parameters:
T- 包裹里元素的类型R- 集合值类型- Parameters:
value- 传入需要包裹的元素,支持CharSequence、Map、Iterable、Iterator、Array类型- Returns:
- 一个包裹里元素可能为空的
Optional
-
ofTry
- Type Parameters:
T- 类型- Parameters:
supplier- 操作- Returns:
- 操作执行后的值
-
of
根据Optional构造Optional- Type Parameters:
T- 包裹的元素类型- Parameters:
optional- optional- Returns:
- 一个包裹里元素可能为空的
Optional
-
get
返回包裹里的元素,取不到则为null,注意!!!此处和Optional.get()不同的一点是本方法并不会抛出NoSuchElementException如果元素为空,则返回null,如果需要一个绝对不能为null的值,则使用orElseThrow()如果需要一个绝对不能为
null的值,则使用orElseThrow()做此处修改的原因是,有时候我们确实需要返回一个null给前端,并且这样的时候并不少见 而使用.orElse(null)需要写整整12个字符,用.get()就只需要6个啦- Returns:
- 包裹里的元素,有可能为
null
-
isEmpty
public boolean isEmpty()判断包裹里元素的值是否不存在,不存在为true,否则为false- Returns:
- 包裹里元素的值不存在 则为
true,否则为false这是jdk11Optional中的新函数
-
getThrowable
获取异常 当调用ofTry(SupplierX)时,异常信息不会抛出,而是保存,调用此方法获取抛出的异常- Returns:
- 异常
-
isFail
public boolean isFail()是否失败 当调用ofTry(SupplierX)时,抛出异常则表示失败- Returns:
- 是否失败
-
ifFail
如果包裹内容失败了,则执行传入的操作(Consumer.accept(T))例如执行有异常就打印结果
Optional.ofTry(() -> 1 / 0).ifFail(Console::logger);- Parameters:
action- 你想要执行的操作- Returns:
- this
- Throws:
NullPointerException- 如果包裹里的值存在,但你传入的操作为null时抛出
-
ifFail
@SafeVarargs public final Optional<T> ifFail(Consumer<? super Throwable> action, Class<? extends Throwable>... exs) throws NullPointerException 如果包裹内容失败了,同时是指定的异常执行传入的操作(Consumer.accept(T))例如如果值存在就打印结果
Optional.ofTry(() -> 1 / 0).ifFail(Console::logger, ArithmeticException.class);- Parameters:
action- 你想要执行的操作exs- 限定的异常- Returns:
- this
- Throws:
NullPointerException- 如果包裹里的值存在,但你传入的操作为null时抛出
-
isPresent
public boolean isPresent()判断包裹里元素的值是否存在,存在为true,否则为false- Returns:
- 包裹里元素的值存在为
true,否则为false
-
ifPresent
如果包裹里的值存在,就执行传入的操作(Consumer.accept(T))例如如果值存在就打印结果
Optional.ofNullable("Hello!").ifPresent(Console::logger);- Parameters:
action- 你想要执行的操作- Returns:
- this
- Throws:
NullPointerException- 如果包裹里的值存在,但你传入的操作为null时抛出
-
filter
判断包裹里的值存在并且与给定的条件是否满足 (Predicate.test(T)执行结果是否为true) 如果满足条件则返回本身 不满足条件或者元素本身为空时返回一个返回一个空的Optional- Parameters:
predicate- 给定的条件- Returns:
- 如果满足条件则返回本身, 不满足条件或者元素本身为空时返回一个空的
Optional - Throws:
NullPointerException- 如果给定的条件为null抛出NPE
-
map
- Type Parameters:
U- 操作返回值的类型- Parameters:
mapper- 值存在时执行的操作- Returns:
- 如果包裹里的值存在,就执行传入的操作(
Function.apply(T))并返回一个包裹了该操作返回值的Optional, 如果不存在,返回一个空的Optional - Throws:
NullPointerException- 如果给定的操作为null,抛出NPE
-
flatMap
如果包裹里的值存在,就执行传入的操作(Function.apply(T))并返回该操作返回值 如果不存在,返回一个空的Optional和map(java.util.function.Function<? super T, ? extends U>)的区别为 传入的操作返回值必须为 Optional- Type Parameters:
U- 操作返回值的类型- Parameters:
mapper- 值存在时执行的操作- Returns:
- 如果包裹里的值存在,就执行传入的操作(
Function.apply(T))并返回该操作返回值 如果不存在,返回一个空的Optional - Throws:
NullPointerException- 如果给定的操作为null或者给定的操作执行结果为null,抛出NPE
-
flattedMap
如果包裹里的值存在,就执行传入的操作(Function.apply(T))并返回该操作返回值 如果不存在,返回一个空的Optional和map(java.util.function.Function<? super T, ? extends U>)的区别为 传入的操作返回值必须为Optional- Type Parameters:
U- 操作返回值的类型- Parameters:
mapper- 值存在时执行的操作- Returns:
- 如果包裹里的值存在,就执行传入的操作(
Function.apply(T))并返回该操作返回值 如果不存在,返回一个空的Optional - Throws:
NullPointerException- 如果给定的操作为null或者给定的操作执行结果为null,抛出NPE- See Also:
-
peek
如果包裹里元素的值存在,就执行对应的操作,并返回本身 如果不存在,返回一个空的Optional- Parameters:
action- 值存在时执行的操作- Returns:
- this
- Throws:
NullPointerException- 如果值存在,并且传入的操作为null
-
peeks
如果包裹里元素的值存在,就执行对应的操作集,并返回本身 如果不存在,返回一个空的Optional属于
ifPresent(java.util.function.Consumer<? super T>)的链式拓展属于
peek(Consumer)的动态拓展- Parameters:
actions- 值存在时执行的操作,动态参数,可传入数组,当数组为一个空数组时并不会抛出NPE- Returns:
- this
- Throws:
NullPointerException- 如果值存在,并且传入的操作集中的元素为null
-
or
如果包裹里元素的值存在,就返回本身,如果不存在,则使用传入的操作执行后获得的Optional- Parameters:
supplier- 不存在时的操作- Returns:
- 如果包裹里元素的值存在,就返回本身,如果不存在,则使用传入的函数执行后获得的
Optional - Throws:
NullPointerException- 如果传入的操作为空,或者传入的操作执行后返回值为空,则抛出NPE
-
stream
-
orElse
如果包裹里元素的值存在,则返回该值,否则返回传入的other- Parameters:
other- 元素为空时返回的值,有可能为null.- Returns:
- 如果包裹里元素的值存在,则返回该值,否则返回传入的
other
-
exceptionOrElse
异常则返回另一个可选值- Parameters:
other- 可选值- Returns:
- 如果未发生异常,则返回该值,否则返回传入的
other
-
orElseGet
如果包裹里元素的值存在,则返回该值,否则返回传入的操作执行后的返回值- Parameters:
supplier- 值不存在时需要执行的操作,返回一个类型与 包裹里元素类型 相同的元素- Returns:
- 如果包裹里元素的值存在,则返回该值,否则返回传入的操作执行后的返回值
- Throws:
NullPointerException- 如果之不存在,并且传入的操作为空,则抛出NPE
-
orElseOpt
如果包裹里元素的值存在,则返回该值,否则返回传入的操作执行后的返回值- Parameters:
supplier- 值不存在时需要执行的操作,返回一个类型与 包裹里元素类型 相同的元素- Returns:
- 如果包裹里元素的值存在,则返回该值,否则返回传入的操作执行后的返回值
- Throws:
NullPointerException- 如果之不存在,并且传入的操作为空,则抛出NPE
-
orElseRun
如果包裹里元素的值存在,则返回该值,否则执行传入的操作- Parameters:
action- 值不存在时执行的操作- Returns:
- 如果包裹里元素的值存在,则返回该值,否则执行传入的操作
- Throws:
NullPointerException- 如果值不存在,并且传入的操作为null
-
orElseThrow
如果包裹里的值存在,则返回该值,否则抛出NoSuchElementException- Returns:
- 返回一个不为
null的包裹里的值 - Throws:
NoSuchElementException- 如果包裹里的值不存在则抛出该异常
-
orElseThrow
如果包裹里的值存在,则返回该值,否则执行传入的操作,获取异常类型的返回值并抛出往往是一个包含无参构造器的异常 例如传入
IllegalStateException::new- Type Parameters:
X- 异常类型- Parameters:
exceptionSupplier- 值不存在时执行的操作,返回值继承Throwable- Returns:
- 包裹里不能为空的值
- Throws:
X- 如果值不存在NullPointerException- 如果值不存在并且 传入的操作为null或者操作执行后的返回值为null
-
toOptional
转换为Optional对象- Returns:
Optional对象
-
toEasyStream
转换为EasyStream对象- Returns:
EasyStream对象
-
equals
判断传入参数是否与Optional相等 在以下情况下返回true- 它也是一个
Optional并且 - 它们包裹住的元素都为空 或者
- 它们包裹住的元素之间相互
equals()
- 它也是一个
-
hashCode
public int hashCode()如果包裹内元素为空,则返回0,否则返回元素的hashcode -
toString
返回包裹内元素调用toString()的结果,不存在则返回null
-