private void createAttributeValueRangeMap() { double currentCount = 0, prevCount = 0; ImmutableRangeMap.Builder<Double, Integer> valuesWithProbabilityRangeBuilder = ImmutableRangeMap.builder(); if (attributeValueRangeMap != null) { valuesWithProbabilityRangeBuilder.putAll(attributeValueRangeMap); } //is this right? for (Integer attributeValBinNumber : histogramOfCountsForValues.keySet()) { prevCount = currentCount; currentCount += histogramOfCountsForValues.get(attributeValBinNumber).doubleValue(); Range<Double> range = Range.openClosed(prevCount / actualSamples, currentCount / actualSamples); //prevCount/actualSamples is the start of the interval we associate with this attribute value. valuesWithProbabilityRangeBuilder.put(range, attributeValBinNumber); } attributeValueRangeMap = valuesWithProbabilityRangeBuilder.build(); }