java最接近的python-generator实现

时间:2018-01-02 01:07:21

标签: java python generator

所以我试着实现一个简单的生成器。

在Python中,如果我想编写一个生成器,我会做这样的事情:

def a_generator():
    yield 1
    # paused, do some logic next call
    yield 'DONE'

我用Java创建了一个生成器类

public abstract class Generator implements Iterable<Object> {

    private ArrayList<Object> yields = new ArrayList<>();

    public Generator() {
        run();
    }

    public void yield(Object element) {
        yields.add(element);
    }

    public Object next() {
        return yields.remove(0);
    }

    public abstract void run();

    @Override
    public Iterator<Object> iterator() {
        return yields.iterator();
    }
}

它可以产生任何类型的数据,而不仅仅是一个

所以现在我可以像这样使用它:

Generator gen = new Generator() {

    @Override
    public void run() {
        yield(1);
        yield("DONE");
    }
}

我可以使用增强的forloop或一次调用next来获得一个结果

但问题是:如果我这样做(如果我必须暂停代码执行)

Generator generator = new Generator() {

    @Override
    public void run() {
        System.out.println(3);
        yield(1);
        yield("DONE");
        System.out.println(2);
    }  
};

它会打印:     3     2     1     “DONE”

所以可以实现“暂停代码执行”???

0 个答案:

没有答案