给定java.util.Collection
,创建无穷大java.util.Iterator
的最简单方法是什么?它返回那些元素,使它们根据给定的分布(org.apache.commons.math.distribution
)出现。
最佳答案
List<Object> l = new ArrayList<Object>(coll);
Iterator<Object> i = new Iterator<Object>() {
public boolean hasNext() { return true; }
public Object next() {
return coll.get(distribution.nextInt(0, l.size());
}
}
然后,您的问题是如何转换apache库中的
Distribution
类以实现nextInt
方法。我不得不说,对我而言,实际上如何从Distribution
界面执行此操作远非显而易见。我可以想到的一种方法(有点垃圾)是使用实际分布所定义的概率生成一个
EmpiricalDistribution
(在random
包中)数据集,然后使用该经验分配作为distribution
(上图)