in commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/CompositeSamplers.java [399:426]
public S build(UniformRandomProvider rng) {
final List<WeightedSampler<S>> list = this.weightedSamplers;
final int n = list.size();
if (n == 0) {
throw new IllegalStateException("No samplers to build the composite");
}
if (n == 1) {
// No composite
final S sampler = list.get(0).sampler;
reset();
return sampler;
}
// Extract the weights and samplers.
final double[] weights = new double[n];
final List<S> samplers = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
final WeightedSampler<S> weightedItem = list.get(i);
weights[i] = weightedItem.getWeight();
samplers.add(weightedItem.getSampler());
}
reset();
final DiscreteSampler discreteSampler = createDiscreteSampler(rng, weights);
return compositeFactory.createSampler(discreteSampler, samplers);
}