protected final void apply(@NotNull Function<Metrics.Metric.Builder, Metrics.Metric> supplier, @NotNull List<String> labelNames, @NotNull List<String> labelValues) { final int labelsCount = metrics.getLabelCount(); for (int i = 0; i < labelValues.size(); i++) { metrics.addLabel( Metrics.LabelPair.newBuilder() .setName(labelNames.get(i)) .setValue(labelValues.get(i)) .build() ); } final Metrics.Metric metric = supplier.apply(metrics); for (int i = labelValues.size() - 1; i >= 0; i--) { metrics.removeLabel(labelsCount + i); } family.addMetric(metric); } }