移动迭代器的位置

时间:2016-11-07 16:44:12

标签: java arraylist collections iterator

我有一个VirtualMachineArrayList<Consumer<VirtualMachine>>,其中包含修改VirtualMachine对象其他字段的命令(Consumer<VirtualMachine>)。运行时,VirtualMachine从ArrayList调用下一个Consumer。

我需要在消费者的消费者列表中修改迭代器的位置。

有没有办法用ArrayList Iterators做到这一点,还是有另一个Java中的Collection可以做到这一点? (SE 8标准库的答案优先于导入第三方库)

1 个答案:

答案 0 :(得分:0)

转换为Consumer<VirtualMachine>ToIntFunction<VirtualMachine>并将返回值解释为迭代器应移动的位置数。

ToIntFunction<VirtualMachine> action1 = vm -> {
    // Do the work over vm
    return 1; // Make one step forward
};
ToIntFunction<VirtualMachine> action2 = vm -> {
    // Do the work over vm
    return -1; //Make one step backward
};
ListIterator<ToIntFunction<VirtualMachine>> i = Arrays.asList(action1, action2).listIterator();
while (i.hasNext()) {
    int count = i.next().applyAsInt(vm) - 1;
    for (; count < 0; count++) {
        i.previous();
    }
    for (; count > 0; count--) {
        i.next();
    }
}