FunctionalInterface改造异常抛出
改造前:
if (null != map) {
throw new RuntimeException("含有转码文件,不可转码!");
}
改造后:
@FunctionalInterface
public interface ThrowExceptionFunction {
/**
* 抛出异常
* @param message 抛出的异常信息
*/
void throwExceptionMessage(String message);
}
VUtils工具类定义方法
public static ThrowExceptionFunction isTrue(Boolean b) {
return (errorMsg)->{
if (b) {
throw new RuntimeException(errorMsg);
}
};
}
VUtils.isTrue(flag).throwExceptionMessage("含有转码文件,不可转码!");
Runnable改造多重if-else
改造前:
if (flag) {
Map<String, Object> map = FfmpegUtil.ffmpegTaskMap.get(fileMsg.getLink());
// 含有转码文件且有转码记录
if (null != map) {
String transcode = (String) map.get("flag");
fileMsg.setTranscode(transcode);
}
// 含有转码文件但没有转码记录,说明之前已完成转码
else {
fileMsg.setTranscode("complete");
}
}
// 没有转码文件说明可转码
else {
fileMsg.setTranscode("transcodable");
}
改造后:
@FunctionalInterface
public interface BranchHandle {
void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);
}
VUtils工具类定义方法
public static BranchHandle isTrueOrFalse(Boolean b) {
return (trueHandle,falseHandle)->{
if (b) {
trueHandle.run();
} else {
falseHandle.run();
}
};
}
VUtils.isTrueOrFalse(flag).trueOrFalseHandle(() -> {
Map<String, Object> map = FfmpegUtil.ffmpegTaskMap.get(fileMsg.getLink());
// 含有转码文件且有转码记录
VUtils.isTrueOrFalse(null != map).trueOrFalseHandle(()->{
String transcode = (String) map.get("flag");
fileMsg.setTranscode(transcode);
}, () -> fileMsg.setTranscode("complete"));
}, () -> fileMsg.setTranscode("transcodable"));
Consumer处理逻辑
改造前:
if (null != map) {
String transcode = (String) map.get("flag");
fileMsg.setTranscode(transcode);
}
// 含有转码文件但没有转码记录,说明之前已完成转码
else {
fileMsg.setTranscode("complete");
}
改造后:
/**
* 空值与非空值分支处理
*/
public interface PresentOrElseHandler<T extends Object> {
/**
* 值不为空时执行消费操作
* 值为空时执行其他的操作
*
* @param action 值不为空时,执行的消费操作
* @param emptyAction 值为空时,执行的操作
* @return void
**/
void presentOrElseHandle(Consumer<? super T> action, Runnable emptyAction);
}
VUtils工具类定义方法
/**
* 参数为true或false时,分别进行不同的操作
*
* @param b
* @return com.example.demo.func.BranchHandle
**/
public static PresentOrElseHandler<?> isBlankOrNoBlank(Map<String, Object> map){
return (consumer, runnable) -> {
if (null != map){
runnable.run();
} else {
consumer.accept(map);
}
};
}
使用:
VUtils.isBlankOrNoBlank(map).presentOrElseHandle(this::outputMap, () -> fileMsg.setTranscode("complete"));
private void outputMap(Object o) {
Map<String, Object> map = (Map<String, Object>) o;
String transcode = (String) map.get("flag");
fileMsg.setTranscode(transcode);
}
Comments NOTHING