private void compute() {
      long max = 0;
      Iterator<String> concat =
          summary.distinct //
              ? freqNames(summary.frequencyDist) // category names, null values and distinct values
              : Iterators.concat(
                  categoryNames(),
                  ImmutableList.of(NULL_NAME).iterator()); // category names and null values

      // Iterate over all category names including or not distinct values.
      // The loop will also determine the mode of the distribution (most frequent value)
      while (concat.hasNext()) {
        String value = concat.next();
        long count = summary.frequencyDist.getCount(value);
        if (count > max) {
          max = count;
          summary.mode = value;
        }
        summary.frequencies.add(
            new Frequency(
                value, summary.frequencyDist.getCount(value), summary.frequencyDist.getPct(value)));
      }
      summary.n = summary.frequencyDist.getSumFreq();
    }