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

org.mydotey.quantile.ckms.CkmsQuantileEstimator Maven / Gradle / Ivy

The newest version!
package org.mydotey.quantile.ckms;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import org.mydotey.quantile.QuantileEstimator;
import org.mydotey.quantile.ckms.CKMSQuantiles.Quantile;

/**
 * @author koqizhao
 *
 * Apr 2, 2018
 */
public class CkmsQuantileEstimator implements QuantileEstimator {

    private CkmsQuantileEstimatorConfig _config;
    private CKMSQuantiles _ckmsQuantiles;

    public CkmsQuantileEstimator(CkmsQuantileEstimatorConfig config) {
        Objects.requireNonNull(config, "config is null");

        _config = config;

        List quantiles = new ArrayList<>();
        _config.getQuantileConfigs().forEach(qc -> {
            Quantile quantile = new Quantile(qc.getQuantile(), qc.getError());
            quantiles.add(quantile);
        });
        _ckmsQuantiles = new CKMSQuantiles<>(quantiles, _config.getComparator());
    }

    @Override
    public void add(T value) {
        _ckmsQuantiles.insert(value);
    }

    @Override
    public Map get(List quantiles) {
        HashMap results = null;
        for (Double quantile : quantiles) {
            T result = _ckmsQuantiles.get(quantile);
            if (_ckmsQuantiles.isEmpty())
                return null;

            if (results == null)
                results = new HashMap<>();

            results.put(quantile, result);
        }

        if (results == null)
            results = new HashMap<>();

        return results;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy