com.mogudiandian.util.lang.EnumGetter Maven / Gradle / Ivy
Show all versions of joshua-util Show documentation
package com.mogudiandian.util.lang;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
/**
* 枚举工具类
* @author Joshua Sun
* @since 1.0.0
*/
public final class EnumGetter {
private static Table, Function, ?>, Map, Enum>>> cache;
static {
cache = HashBasedTable.create();
}
private EnumGetter() {
super();
}
/**
* 根据枚举类和属性获取枚举
* @param enumClass 枚举类
* @param getterMethodReference 属性Getter的Method-Reference
* @param value 属性值
* @param 枚举类型
* @param 属性类型
* @return 枚举
*/
@SuppressWarnings("unchecked")
public static , P> E get(Class enumClass, Function getterMethodReference, P value) {
Map enumMap = (Map
) cache.get(enumClass, getterMethodReference);
if (enumMap == null) {
enumMap = EnumSet.allOf(enumClass).stream().collect(HashMap::new, (m, e) -> m.put(getterMethodReference.apply(e), e), Map::putAll);
cache.put(enumClass, getterMethodReference, (Map, Enum>>) enumMap);
}
return enumMap.get(value);
}
/**
* 根据枚举类和属性获取枚举
* @param enumClass 枚举类
* @param getterMethodReference 属性Getter的Method-Reference
* @param value 属性值
* @param defaultValue 默认值
* @param 枚举类型
* @param 属性类型
* @return 枚举
*/
public static , P> E getOrDefault(Class enumClass, Function getterMethodReference, P value, E defaultValue) {
return Optional.ofNullable(get(enumClass, getterMethodReference, value)).orElse(defaultValue);
}
/**
* 根据枚举的某一个属性(输入属性)和值,获取另一个属性(输出属性)的值
* @param enumClass 枚举类
* @param keyMethodReference 输入属性的Method-Reference
* @param key 输入属性值
* @param valueMethodReference 输出属性的Method-Reference
* @return 输出属性的值 默认为空
* @param 枚举类型
* @param 输入属性类型
* @param 输出属性类型
*/
public static , P, R> R getEnumPropertyValue(Class enumClass, Function keyMethodReference, P key, Function valueMethodReference) {
return getEnumPropertyValue(enumClass, keyMethodReference, key, valueMethodReference, null);
}
/**
* 根据枚举的某一个属性(输入属性)和值,获取另一个属性(输出属性)的值
* @param enumClass 枚举类
* @param keyMethodReference 输入属性的Method-Reference
* @param key 输入属性值
* @param valueMethodReference 输出属性的Method-Reference
* @param defaultValue 默认输出属性值
* @return 输出属性的值
* @param 枚举类型
* @param 输入属性类型
* @param 输出属性类型
*/
public static , P, R> R getEnumPropertyValue(Class enumClass, Function keyMethodReference, P key, Function valueMethodReference, R defaultValue) {
return Optional.ofNullable(key)
.map(x -> EnumGetter.get(enumClass, keyMethodReference, x))
.map(valueMethodReference)
.orElse(defaultValue);
}
}