给定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(上图)

10-05 20:11