T
- 包裹里元素的类型public class Opt<T> extends Object
Optional
Modifier and Type | Method and Description |
---|---|
static <T> Opt<T> |
empty()
返回一个空的
Opt |
boolean |
equals(Object obj)
判断传入参数是否与
Opt 相等
在以下情况下返回true
它也是一个 Opt 并且
它们包裹住的元素都为空 或者
它们包裹住的元素之间相互 equals()
|
T |
exceptionOrElse(T other)
异常则返回另一个可选值
|
Opt<T> |
filter(Predicate<? super T> predicate)
判断包裹里的值存在并且与给定的条件是否满足 (
Predicate.test(T) 执行结果是否为true)
如果满足条件则返回本身
不满足条件或者元素本身为空时返回一个返回一个空的Opt |
<U> Opt<U> |
flatMap(Function<? super T,? extends Opt<? extends U>> mapper)
如果包裹里的值存在,就执行传入的操作(
Function.apply(T) )并返回该操作返回值
如果不存在,返回一个空的Opt
和 map(java.util.function.Function<? super T, ? extends U>) 的区别为 传入的操作返回值必须为 Opt |
<U> Opt<U> |
flattedMap(Function<? super T,? extends Optional<? extends U>> mapper)
如果包裹里的值存在,就执行传入的操作(
Function.apply(T) )并返回该操作返回值
如果不存在,返回一个空的Opt
和 map(java.util.function.Function<? super T, ? extends U>) 的区别为 传入的操作返回值必须为 Optional |
T |
get()
返回包裹里的元素,取不到则为
null ,注意!!! |
Exception |
getException()
获取异常
当调用 ofTry(Func0) 时,异常信息不会抛出,而是保存,调用此方法获取抛出的异常 |
int |
hashCode()
如果包裹内元素为空,则返回0,否则返回元素的
hashcode |
Opt<T> |
ifFail(Consumer<? super Throwable> action)
如果包裹内容失败了,则执行传入的操作(
Consumer.accept(T) )
例如执行有异常就打印结果
Opt.ofTry(() -> 1 / 0).ifFail(Console::log);
|
Opt<T> |
ifPresent(Consumer<? super T> action)
如果包裹里的值存在,就执行传入的操作(
Consumer.accept(T) )
例如如果值存在就打印结果
{@code
Opt.ofNullable("Hello Hutool!"). |
Opt<T> |
ifPresentOrElse(Consumer<? super T> action,
VoidFunc0 emptyAction)
如果包裹里的值存在,就执行传入的值存在时的操作(
Consumer.accept(T) )
否则执行传入的值不存在时的操作(VoidFunc0 中的VoidFunc0.call() )
例如值存在就打印对应的值,不存在则用Console.error 打印另一句字符串
{@code
Opt.ofNullable("Hello Hutool!"). |
boolean |
isEmpty()
判断包裹里元素的值是否不存在,不存在为
true ,否则为false |
boolean |
isFail()
是否失败
当调用 ofTry(Func0) 时,抛出异常则表示失败 |
boolean |
isPresent()
判断包裹里元素的值是否存在,存在为
true ,否则为false |
<U> Opt<U> |
map(Function<? super T,? extends U> mapper)
|
<U> Opt<U> |
mapOrElse(Function<? super T,? extends U> mapper,
VoidFunc0 emptyAction)
如果包裹里的值存在,就执行传入的值存在时的操作(
Function.apply(Object) )支持链式调用、转换为其他类型
否则执行传入的值不存在时的操作(VoidFunc0 中的VoidFunc0.call() )
如果值存在就转换为大写,否则用Console.error 打印另一句字符串
String hutool = Opt.ofBlankAble("hutool").mapOrElse(String::toUpperCase, () -> Console.log("yes")).mapOrElse(String::intern, () -> Console.log("Value is not present~")).get();
|
static <T> Opt<T> |
of(T value)
返回一个包裹里元素不可能为空的
Opt |
static <T> Opt<T> |
ofBlankAble(T value)
返回一个包裹里元素可能为空的
Opt ,额外判断了空字符串的情况 |
static <T,R extends Collection<T>> |
ofEmptyAble(R value)
返回一个包裹里
List 集合可能为空的Opt ,额外判断了集合内元素为空的情况 |
static <T> Opt<T> |
ofNullable(T value)
返回一个包裹里元素可能为空的
Opt |
static <T> Opt<T> |
ofTry(Func0<T> supplier) |
Opt<T> |
or(Supplier<? extends Opt<? extends T>> supplier)
如果包裹里元素的值存在,就返回本身,如果不存在,则使用传入的操作执行后获得的
Opt |
T |
orElse(T other)
如果包裹里元素的值存在,则返回该值,否则返回传入的
other |
T |
orElseGet(Supplier<? extends T> supplier)
如果包裹里元素的值存在,则返回该值,否则返回传入的操作执行后的返回值
|
T |
orElseThrow()
如果包裹里的值存在,则返回该值,否则抛出
NoSuchElementException |
<X extends Throwable> |
orElseThrow(Function<String,? extends X> exceptionFunction,
String message)
如果包裹里的值存在,则返回该值,否则执行传入的操作,获取异常类型的返回值并抛出
往往是一个包含 自定义消息 构造器的异常 例如
{@code
Opt.ofNullable(null).orElseThrow(IllegalStateException::new, "Ops!
|
<X extends Throwable> |
orElseThrow(Supplier<? extends X> exceptionSupplier)
如果包裹里的值存在,则返回该值,否则执行传入的操作,获取异常类型的返回值并抛出
往往是一个包含无参构造器的异常 例如传入
IllegalStateException::new |
Opt<T> |
peek(Consumer<T> action)
如果包裹里元素的值存在,就执行对应的操作,并返回本身
如果不存在,返回一个空的
Opt
属于 ifPresent(java.util.function.Consumer<? super T>) 的链式拓展 |
Opt<T> |
peeks(Consumer<T>... actions)
如果包裹里元素的值存在,就执行对应的操作集,并返回本身
如果不存在,返回一个空的
Opt
属于 ifPresent(java.util.function.Consumer<? super T>) 的链式拓展
属于 peek(Consumer) 的动态拓展 |
Stream<T> |
stream()
|
Optional<T> |
toOptional()
转换为
Optional 对象 |
String |
toString()
返回包裹内元素调用
toString() 的结果,不存在则返回null |
public static <T> Opt<T> empty()
Opt
T
- 包裹里元素的类型public static <T> Opt<T> of(T value)
Opt
T
- 包裹里元素的类型value
- 包裹里的元素Opt
NullPointerException
- 如果传入的元素为空,抛出 NPE
public static <T> Opt<T> ofNullable(T value)
Opt
T
- 包裹里元素的类型value
- 传入需要包裹的元素Opt
public static <T> Opt<T> ofBlankAble(T value)
Opt
,额外判断了空字符串的情况T
- 包裹里元素的类型value
- 传入需要包裹的元素Opt
public static <T,R extends Collection<T>> Opt<R> ofEmptyAble(R value)
List
集合可能为空的Opt
,额外判断了集合内元素为空的情况T
- 包裹里元素的类型R
- 集合值类型value
- 传入需要包裹的元素,支持CharSequence、Map、Iterable、Iterator、Array类型Opt
public static <T> Opt<T> ofTry(Func0<T> supplier)
T
- 类型supplier
- 操作public T get()
null
,注意!!!此处和Optional.get()
不同的一点是本方法并不会抛出NoSuchElementException
如果元素为空,则返回null
,如果需要一个绝对不能为null
的值,则使用orElseThrow()
如果需要一个绝对不能为 null
的值,则使用orElseThrow()
做此处修改的原因是,有时候我们确实需要返回一个null给前端,并且这样的时候并不少见
而使用 .orElse(null)
需要写整整12个字符,用.get()
就只需要6个啦
null
public boolean isEmpty()
true
,否则为false
true
,否则为false
Optional
中的新函数public Exception getException()
ofTry(Func0)
时,异常信息不会抛出,而是保存,调用此方法获取抛出的异常public boolean isFail()
ofTry(Func0)
时,抛出异常则表示失败public Opt<T> ifFail(Consumer<? super Throwable> action) throws NullPointerException
action
- 你想要执行的操作NullPointerException
- 如果包裹里的值存在,但你传入的操作为null
时抛出public boolean isPresent()
true
,否则为false
true
,否则为false
public Opt<T> ifPresent(Consumer<? super T> action)
Consumer.accept(T)
)
例如如果值存在就打印结果
Opt.ofNullable("Hello Hutool!").ifPresent(Console::log);
action
- 你想要执行的操作NullPointerException
- 如果包裹里的值存在,但你传入的操作为null
时抛出public Opt<T> ifPresentOrElse(Consumer<? super T> action, VoidFunc0 emptyAction)
Consumer.accept(T)
)
否则执行传入的值不存在时的操作(VoidFunc0
中的VoidFunc0.call()
)
例如值存在就打印对应的值,不存在则用Console.error
打印另一句字符串
Opt.ofNullable("Hello Hutool!").ifPresentOrElse(Console::log, () -> Console.error("Ops!Something is wrong!"));
action
- 包裹里的值存在时的操作emptyAction
- 包裹里的值不存在时的操作NullPointerException
- 如果包裹里的值存在时,执行的操作为 null
, 或者包裹里的值不存在时的操作为 null
,则抛出NPE
public <U> Opt<U> mapOrElse(Function<? super T,? extends U> mapper, VoidFunc0 emptyAction)
Function.apply(Object)
)支持链式调用、转换为其他类型
否则执行传入的值不存在时的操作(VoidFunc0
中的VoidFunc0.call()
)
如果值存在就转换为大写,否则用Console.error
打印另一句字符串
String hutool = Opt.ofBlankAble("hutool").mapOrElse(String::toUpperCase, () -> Console.log("yes")).mapOrElse(String::intern, () -> Console.log("Value is not present~")).get();
U
- map后新的类型mapper
- 包裹里的值存在时的操作emptyAction
- 包裹里的值不存在时的操作NullPointerException
- 如果包裹里的值存在时,执行的操作为 null
, 或者包裹里的值不存在时的操作为 null
,则抛出NPE
public Opt<T> filter(Predicate<? super T> predicate)
Predicate.test(T)
执行结果是否为true)
如果满足条件则返回本身
不满足条件或者元素本身为空时返回一个返回一个空的Opt
predicate
- 给定的条件Opt
NullPointerException
- 如果给定的条件为 null
,抛出NPE
public <U> Opt<U> map(Function<? super T,? extends U> mapper)
U
- 操作返回值的类型mapper
- 值存在时执行的操作Function.apply(T)
)并返回一个包裹了该操作返回值的Opt
,
如果不存在,返回一个空的Opt
NullPointerException
- 如果给定的操作为 null
,抛出 NPE
public <U> Opt<U> flatMap(Function<? super T,? extends Opt<? extends U>> mapper)
Function.apply(T)
)并返回该操作返回值
如果不存在,返回一个空的Opt
和 map(java.util.function.Function<? super T, ? extends U>)
的区别为 传入的操作返回值必须为 OptU
- 操作返回值的类型mapper
- 值存在时执行的操作Function.apply(T)
)并返回该操作返回值
如果不存在,返回一个空的Opt
NullPointerException
- 如果给定的操作为 null
或者给定的操作执行结果为 null
,抛出 NPE
public <U> Opt<U> flattedMap(Function<? super T,? extends Optional<? extends U>> mapper)
Function.apply(T)
)并返回该操作返回值
如果不存在,返回一个空的Opt
和 map(java.util.function.Function<? super T, ? extends U>)
的区别为 传入的操作返回值必须为 Optional
U
- 操作返回值的类型mapper
- 值存在时执行的操作Function.apply(T)
)并返回该操作返回值
如果不存在,返回一个空的Opt
NullPointerException
- 如果给定的操作为 null
或者给定的操作执行结果为 null
,抛出 NPE
Optional.flatMap(Function)
public Opt<T> peek(Consumer<T> action) throws NullPointerException
Opt
action
- 值存在时执行的操作NullPointerException
- 如果值存在,并且传入的操作为 null
@SafeVarargs public final Opt<T> peeks(Consumer<T>... actions) throws NullPointerException
Opt
属于 ifPresent(java.util.function.Consumer<? super T>)
的链式拓展
属于 peek(Consumer)
的动态拓展
actions
- 值存在时执行的操作,动态参数,可传入数组,当数组为一个空数组时并不会抛出 NPE
NullPointerException
- 如果值存在,并且传入的操作集中的元素为 null
public Opt<T> or(Supplier<? extends Opt<? extends T>> supplier)
Opt
supplier
- 不存在时的操作Opt
NullPointerException
- 如果传入的操作为空,或者传入的操作执行后返回值为空,则抛出 NPE
public T orElse(T other)
other
other
- 元素为空时返回的值,有可能为 null
.other
public T exceptionOrElse(T other)
other
- 可选值other
public T orElseGet(Supplier<? extends T> supplier)
supplier
- 值不存在时需要执行的操作,返回一个类型与 包裹里元素类型 相同的元素NullPointerException
- 如果之不存在,并且传入的操作为空,则抛出 NPE
public T orElseThrow()
NoSuchElementException
null
的包裹里的值NoSuchElementException
- 如果包裹里的值不存在则抛出该异常public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X extends Throwable
往往是一个包含无参构造器的异常 例如传入IllegalStateException::new
X
- 异常类型exceptionSupplier
- 值不存在时执行的操作,返回值继承 Throwable
X
- 如果值不存在NullPointerException
- 如果值不存在并且 传入的操作为 null
或者操作执行后的返回值为null
X extends Throwable
public <X extends Throwable> T orElseThrow(Function<String,? extends X> exceptionFunction, String message) throws X extends Throwable
往往是一个包含 自定义消息 构造器的异常 例如
Opt.ofNullable(null).orElseThrow(IllegalStateException::new, "Ops!Something is wrong!");
X
- 异常类型exceptionFunction
- 值不存在时执行的操作,返回值继承 Throwable
message
- 作为传入操作执行时的参数,一般作为异常自定义提示语X
- 如果值不存在NullPointerException
- 如果值不存在并且 传入的操作为 null
或者操作执行后的返回值为null
X extends Throwable
public boolean equals(Object obj)
Opt
相等
在以下情况下返回true
Opt
并且
equals()
public int hashCode()
hashcode
Copyright © 2024. All rights reserved.