我有一个VirtualMachine
类ArrayList<Consumer<VirtualMachine>>
,其中包含修改VirtualMachine对象其他字段的命令(Consumer<VirtualMachine>
)。运行时,VirtualMachine从ArrayList调用下一个Consumer。
我需要在消费者的消费者列表中修改迭代器的位置。
有没有办法用ArrayList Iterators做到这一点,还是有另一个Java中的Collection可以做到这一点? (SE 8标准库的答案优先于导入第三方库)
答案 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();
}
}