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

shz.cache.Cache Maven / Gradle / Ivy

package shz.cache;

import shz.PropHelp;
import shz.Validator;

import java.lang.annotation.Annotation;
import java.lang.reflect.Parameter;
import java.text.Collator;
import java.util.*;
import java.util.function.Function;

public interface Cache {
    default V get(K key) {
        return null;
    }

    default void put(K key, V val) {
    }

    default boolean containsKey(K key) {
        return false;
    }

    default int size() {
        return 0;
    }

    default void delete(K key) {
    }

    void clear();

    /**
     * 根据参数注解生成key
     */
    static  String generateKey(String key, Object[] args, Parameter[] parameters, Class aCls, Function keys) {
        if (Validator.isEmpty(args)) return key;
        int len = args.length;
        if (len != parameters.length) throw new IllegalArgumentException();
        StringBuilder sb = new StringBuilder();
        boolean flag = Validator.nonBlank(key);
        if (flag) sb.append(key);
        for (int i = 0; i < len; ++i) {
            A a = parameters[i].getAnnotation(aCls);
            if (a == null) continue;
            if (flag) sb.append(":");
            else flag = true;
            sb.append(generateKey(null, args[i], keys.apply(a)));
        }
        return sb.toString();
    }

    /**
     * 生成key
     *
     * @param key  主key
     * @param arg  请求参数
     * @param keys 请求key集合
     */
    static String generateKey(String key, Object arg, String... keys) {
        StringBuilder sb = new StringBuilder();
        boolean flag = Validator.nonBlank(key);
        if (flag) sb.append(key);
        Map map = PropHelp.fieldValueMap(arg);
        if (map.isEmpty()) {
            if (Validator.nonEmpty(keys)) {
                if (flag) sb.append(":");
                sb.append(String.join(":", keys));
            } else if (arg != null) {
                if (flag) sb.append(":");
                sb.append(arg.toString());
            }
        } else {
            List list = Validator.isEmpty(keys) ? new ArrayList<>(map.keySet()) : Arrays.asList(keys);
            list.sort(Collator.getInstance(Locale.CHINA));
            key = list.get(0);
            if (flag) sb.append(":");
            sb.append(key).append("-").append(map.get(key));
            int size = list.size();
            for (int i = 1; i < size; ++i) {
                key = list.get(i);
                sb.append(":").append(key).append("-").append(map.get(key));
            }
        }
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy