code: public static Distribution createExplicit(double[] bounds) {
      List<Double> allBounds = Doubles.asList(bounds);
      Set<Double> uniqueBounds = Sets.newHashSet(allBounds);
      if (allBounds.size() != uniqueBounds.size()) {
        throw new IllegalArgumentException(MSG_SOME_BOUNDS_ARE_THE_SAME);
      }
      Collections.sort(allBounds);
      ExplicitBuckets buckets = ExplicitBuckets.newBuilder().addAllBounds(allBounds).build();
      Builder builder = Distribution.newBuilder().setExplicitBuckets(buckets);
      for (int i = 0; i < allBounds.size() + 1; i++) {
        builder.addBucketCounts(0L);
      }
      return builder.build();
    }
docs: Creates a {@code Distribution} with {@code ExplicitBuckets}.
  
  @param bounds initializes the bounds used to define the explicit buckets
  
  @return a {@code Distribution} with {@code ExplicitBuckets}
  @throws IllegalArgumentException if a bad input prevents creation.