Во-первых, я бы хотел, чтобы вы задали вопросы более точно. Я не уверен, что следующий ответ может помочь решить вашу проблему.
Как уже сказали оба комментатора, существует несколько способов реализации Отмена / Поведение истории .
1. Шаблон дизайна
Я рекомендую вам использовать шаблон проектирования команд, как уже предложено acarlstein .
Здесь - еще одна ссылка, которую я могу порекомендовать.
2. Стек (дубликаты)
Если вы хотите реализовать это быстро и легко, вы можете использовать Stack вместо ArrayList.
Это хранилище LIFO (Last In - First Out).
Вы можете реализовать Stack (может содержать дубликаты) следующим образом:
val stack = stackOf(itemOne, itemTwo, itemThree)
stack.push(itemFour)
val item = stack.pop() // itemFour
Но, как я понимаю ваш вопрос, вы не хотите иметь дубликаты в своей истории.
3. Адаптация стека (без дубликатов)
Без дубликатов вы можете адаптировать Stack и переопределить его push()
, чтобы избежать дубликатов.
Вот так:
class UniqueStack<E> : Stack<E>() {
override fun push(item : E) : E {
// when item is already part of the stack, push it to the top
if (contains(item)) remove(item)
return super.push(item)
}
}
Реализация может выглядеть так:
val history = UniqueStack<Int>()
history.push(1) // [1]
history.push(1) // [1]
history.push(2) // [1, 2]
history.push(1) // [2, 1]
history.push(1) // [2, 1]
println(history) // prints "[2, 1]"
println(history.pop()) // prints "1"
println(history) // prints "[2]"
Я надеюсь, что смог вам помочь.