package com.hgf.studyspringboot.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
import java.util.function.Function;
/**
* created by hgf
* created time is 2020/11/16
*/
public class FunctionUtil {
private static final Logger log = LoggerFactory.getLogger(FunctionUtil.class);
/**
* 重试
*
* @param runnable 具体执行方法
* @param time 重试次数
*/
public static void retryFunction(Runnable runnable, int time) {
while (true) {
try {
runnable.run();
} catch (Exception e) {
time--;
if (time < 0) {
throw new RuntimeException(e);
}
log.debug("重试--------");
}
}
}
/**
* 重试
*
* @param function 执行方法
* @param time 重试次数
* @param <I> 输入类型
* @param <O> 输出类型
* @return
*/
public static <I, O> O retryFunction(Function<I, O> function, I i, int time) {
while (true) {
try {
return function.apply(i);
} catch (Exception e) {
time--;
if (time < 0) {
throw new RuntimeException(e);
}
log.debug("重试--------");
}
}
}
/**
* 缓存函数结果
*
* @param function 执行方法
* @param i 入参
* @param cacheMap 缓存Map
* @param <I> 输入类型
* @param <O> 输出类型
* @return
*/
public static <I, O> O cacheFunction(Function<I, O> function, I i, Map<I, O> cacheMap) {
O o = cacheMap.get(i);
if (o != null) {
return o;
}
o = function.apply(i);
cacheMap.put(i, o);
return o;
}
/**
* @param function 执行方法
* @param i 入参
* @param defaultReturn 默认返回值
* @param <I> 输入类型
* @param <O> 输出类型
* @return
*/
public static <I, O> O getOrReturnDefault(Function<I, O> function, I i, O defaultReturn) {
try {
return function.apply(i);
} catch (Exception e) {
e.printStackTrace();
return defaultReturn;
}
}
/**
* 统一处理日志
*
* @param function 执行方法
* @param i 入参
* @param logMessage 日志内容
* @param <I> 输入类型
* @param <O> 输出类型
* @return
*/
public static <I, O> O logFunction(Function<I, O> function, I i, String logMessage) {
O o = function.apply(i);
log.debug("{},request:{},response:{}", logMessage, i, o);
return o;
}
public static void main(String[] args) {
FunctionUtil.logFunction((i) -> ++i, 1, "日志");
}
}
函数式编程一些好用的方式
最新推荐文章于 2022-06-09 10:49:12 发布