All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mogudiandian.util.lang.EnumGetter Maven / Gradle / Ivy

The newest version!
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>> 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>) 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); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy