class MultiGetResult<K, V> extends CacheResult {
    private volatile Map<K, CacheGetResult<V>> values;

    public MultiGetResult(CompletionStage<ResultData> future) {
        super(future);
    }

    public MultiGetResult(CacheResultCode resultCode, String message, Map<K, CacheGetResult<V>> values) {
        super(CompletableFuture.completedFuture(new ResultData(resultCode, message, values)));
    }

    public MultiGetResult(Throwable e) {
        super(e);
    }

    public Map<K, CacheGetResult<V>> getValues() {
        waitForResult();
        return values;
    }

    @Override
    protected void fetchResultSuccess(ResultData resultData) {
        values = (Map<K, CacheGetResult<V>>) resultData.getOriginData();
        super.fetchResultSuccess(resultData);
    }

    @Override
    protected void fetchResultFail(Throwable e) {
        values = null;
        super.fetchResultFail(e);
    }

    public Map<K, V> unwrapValues() {<FILL_FUNCTION_BODY>}
}

        waitForResult();
        if (values == null) {
            return null;
        }
        Map<K, V> m = new HashMap<>();
        values.entrySet().stream().forEach((en) -> {
            if (en.getValue().isSuccess()) {
                m.put(en.getKey(), en.getValue().getValue());
            }
        });
        return m;
    
<methods>public void <init>(CompletionStage<com.alicp.jetcache.ResultData>) ,public void <init>(com.alicp.jetcache.CacheResultCode, java.lang.String) ,public void <init>(java.lang.Throwable) ,public CompletionStage<com.alicp.jetcache.ResultData> future() ,public java.lang.String getMessage() ,public com.alicp.jetcache.CacheResultCode getResultCode() ,public boolean isSuccess() ,public static void setDefaultTimeout(java.time.Duration) ,public void setTimeout(java.time.Duration) ,public void waitForResult(java.time.Duration) <variables>private static java.time.Duration DEFAULT_TIMEOUT,public static final com.alicp.jetcache.CacheResult EXISTS_WITHOUT_MSG,public static final com.alicp.jetcache.CacheResult FAIL_ILLEGAL_ARGUMENT,public static final com.alicp.jetcache.CacheResult FAIL_WITHOUT_MSG,public static final java.lang.String MSG_ILLEGAL_ARGUMENT,public static final com.alicp.jetcache.CacheResult PART_SUCCESS_WITHOUT_MSG,public static final com.alicp.jetcache.CacheResult SUCCESS_WITHOUT_MSG,private final non-sealed CompletionStage<com.alicp.jetcache.ResultData> future,private volatile java.lang.String message,private volatile com.alicp.jetcache.CacheResultCode resultCode,private volatile java.time.Duration timeout