
develop.toolkit.base.components.IWantData Maven / Gradle / Ivy
The newest version!
package develop.toolkit.base.components;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* 我想要的数据
*
* @author qiushui on 2021-10-30.
*/
@Getter
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class IWantData {
// 是否成功
private final boolean success;
// 失败信息
private final String message;
// 想要的数据
private final T data;
/**
* 成功获取
*
* @param data 数据
*/
public static IWantData ok(T data) {
return new IWantData<>(true, null, data);
}
/**
* 成功获取
*/
public static IWantData ok() {
return ok(null);
}
/**
* 获取失败
*
* @param message 失败信息
*/
public static IWantData fail(String message) {
return new IWantData<>(false, message, null);
}
/**
* 转换
*
* @param function 转换函数
* @param 目标类型
* @return 转换值
*/
public IWantData map(Function super T, ? extends R> function) {
return success ? IWantData.ok(function.apply(data)) : IWantData.fail(message);
}
/**
* 扁平化转换
*
* @param function 转换函数
* @param 目标类型
* @return 转换值
*/
public IWantData flatMap(Function super T, IWantData> function) {
return success ? function.apply(data) : IWantData.fail(message);
}
/**
* 提供默认值的数据获取
*
* @param defaultValue 默认值
* @param messageConsumer 失败信息处理
* @return 数据值
*/
public T returnData(T defaultValue, Consumer messageConsumer) {
if (success) {
return data;
}
if (messageConsumer != null) {
messageConsumer.accept(message);
}
return defaultValue;
}
/**
* 提供默认值的数据获取
*
* @param defaultSupplier 默认值提供器
* @param messageConsumer 失败信息处理
* @return 数据值
*/
public T returnData(Supplier defaultSupplier, Consumer messageConsumer) {
if (success) {
return data;
}
if (messageConsumer != null) {
messageConsumer.accept(message);
}
return defaultSupplier.get();
}
/**
* 会抛异常的数据获取
*
* @param throwableFunction 异常函数
* @return 数据值
*/
public T returnDataThrows(Function throwableFunction) {
if (success) {
return data;
}
throw throwableFunction.apply(message);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy