模仿java.util.Optional<T>写的工具类,用于集合的判空以及后续处理
/**
* 模仿java.util.Optional<T>写的工具类,
* 用于集合的判空以及后续处理
*/
public class CollectOptional<E> {
private static final CollectOptional<?> EMPTY = new CollectOptional<>();
private final Collection<E> collect;
private CollectOptional() {
this.collect = null;
}
private CollectOptional(Collection<E> collect) {
this.collect = collect;
}
public static <E> CollectOptional<E> empty() {
@SuppressWarnings("unchecked")
CollectOptional<E> collect = (CollectOptional<E>) EMPTY;
return collect;
}
/**
* 获取集合的Optional
* @param collect 可能为空的集合
* @param <E> 集合元素范型
* @return CollectOptional<E>
*/
public static <E> CollectOptional<E> ofEmpty(Collection<E> collect) {
if(CollectionUtils.isEmpty(collect)){
return empty();
}
return new CollectOptional<>(collect);
}
/**
* 获取集合
*/
public Collection<E> get(){
if (collect == null) {
throw new NoSuchElementException("No value present");
}
return collect;
}
/**
* 集合是否不为空时
*/
public boolean isNotEmpty() {
return !CollectionUtils.isEmpty(collect);
}
/**
* 集合是否不为空时
*/
public CollectOptional<E> isEmpty(Consumer<Collection<E>> consumer) {
if(CollectionUtils.isEmpty(collect)){
consumer.accept(collect);
}
return this;
}
/**
* 当集合不为空时,执行consumer
* @param consumer consumer
*/
public void ifNotEmpty(Consumer<Collection<E>> consumer) {
if(CollectionUtils.isEmpty(collect)){
return;
}
consumer.accept(collect);
}
/**
* 当集合不为空时,执行function
* @param function function
*/
public <R> R ifPresentApply(Function<Collection<E>, R> function) {
if(CollectionUtils.isEmpty(collect)){
return null;
}
return function.apply(collect);
}
}