I agree that that may sound domain-specific. I think it can be something like Collection<T>.random(distribution: Collection<Double>) or not collection, but also an array or a double array. Also, it may be useful to let sum of the distribution elements be different postive number from 1. If so, we can also support integers for distribution. Example:
listOf('a', 'b', 'c', 'd').random(distribution = listOf (1, 2, 2, 5))
p('a') = 1/sum = 0.1
p('b') = p('c') = 0.2
p('d') = 0.5