package vc.thinker.utils;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.springframework.lang.Nullable;

import java.util.List;
import java.util.Map;
import java.util.function.Function;

/**
 * 枚举解析器 解析出多个枚举
 *
 * @author HeTongHao
 * @since 2021/6/17 16:34
 */
public class ResolveMultipart<T, K> {
    private final Map<K, List<T>> keyValueMap = Maps.newHashMap();


    /**
     * 构造
     *
     * @param values     枚举数组
     * @param resolveKey 根据那个字段解析
     */
    public ResolveMultipart(T[] values, Function<T, K> resolveKey) {
        for (T value : values) {
            keyValueMap.computeIfAbsent(resolveKey.apply(value), k -> Lists.newLinkedList()).add(value);
        }
    }

    public ResolveMultipart(List<T> values, Function<T, K> resolveKey) {
        for (T value : values) {
            keyValueMap.computeIfAbsent(resolveKey.apply(value), k -> Lists.newLinkedList()).add(value);
        }
    }

    @Nullable
    public List<T> resolve(K key) {
        return keyValueMap.get(key);
    }
}