2016-11-07 30 views
0

我有一个类VirtualMachine,其中ArrayList<Consumer<VirtualMachine>>包含修改VirtualMachine对象的其他字段的命令(Consumer<VirtualMachine>)。运行时,VirtualMachine从ArrayList调用下一个Consumer。移动迭代器的位置

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

有没有办法做到这一点与ArrayList迭代器,或者是否有另一个Java中的集合可以做到这一点? (SE 8标准库的答案优先于导入第三方库)

+0

你是什么意思“修改迭代器的位置”?你的意思是你想改变'ArrayList'中'Consumer'对象的顺序吗? – Andreas

回答

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(); 
    } 
}