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

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

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

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;

/**
 * @author koqizhao
 *
 * Apr 1, 2018
 */
public class CkmsQuantileEstimatorConfig {

    private Comparator _comparator;
    private List _quantileConfigs;

    protected CkmsQuantileEstimatorConfig(Comparator comparator, List quantileConfigs) {
        _comparator = comparator;
        _quantileConfigs = Collections.unmodifiableList(quantileConfigs);
    }

    public Comparator getComparator() {
        return _comparator;
    }

    public List getQuantileConfigs() {
        return _quantileConfigs;
    }

    public static class QuantileConfig {

        private double quantile;
        private double error;

        protected QuantileConfig(double quantile, double error) {
            this.quantile = quantile;
            this.error = error;
        }

        public double getQuantile() {
            return quantile;
        }

        public double getError() {
            return error;
        }

    }

    public static  Builder newBuilder() {
        return new Builder<>();
    }

    public static class Builder {

        private Comparator _comparator;
        private List _quantileConfigs;

        protected Builder() {
            _quantileConfigs = new ArrayList<>();
        }

        public Builder setComparator(Comparator comparator) {
            _comparator = comparator;
            return this;
        }

        public Builder addQuantileConfig(double quantile, double error) {
            String format = "%s %f invalid: expected number between 0.0 and 1.0.";
            if (quantile < 0.0 || quantile > 1.0)
                throw new IllegalArgumentException(String.format(format, "quantile", quantile));

            if (error < 0.0 || error > 1.0)
                throw new IllegalArgumentException(String.format(format, "error", error));

            _quantileConfigs.add(new QuantileConfig(quantile, error));
            return this;
        }

        public CkmsQuantileEstimatorConfig build() {
            Objects.requireNonNull(_comparator, "comparator is not set");

            if (_quantileConfigs.isEmpty())
                throw new IllegalArgumentException("quantileConfig is not added");

            return new CkmsQuantileEstimatorConfig<>(_comparator, new ArrayList<>(_quantileConfigs));
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy