2016-11-07 41 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(); 
    } 
}