Удалить элемент из изменяемого списка - removeIf - PullRequest
0 голосов
/ 12 марта 2020
    private var cardsList: MutableList<SomeObject>? = null
    val condition = Predicate<SomeObject> {
        it.id() == cardId
    }

    cardsList?.toMutableList()?.removeIf(condition)

    getNavigator()?.initRecycleView(cardsList)

У меня есть один элемент в списке; Я подтвердил, что идентификатор совпадает с cardId.

Когда я запускаю приведенный выше код, я ожидаю, что после вызова removeIf, cardsList будет пустым, но у него все еще будет один элемент.

removeIf() возвращает true при вызове с condition.

Я не понимаю.

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вы на самом деле ничего не удаляете из cardsList. cardsList?.toMutableList() создает другой объект изменяемого списка и удаляет его. Вы должны сделать:

cardsList?.removeIf(condition)

Редактировать из вашего комментария. Я подозреваю, что хотя вы объявили cardsList как MutableList где-то по пути, вы сделали что-то вроде:

cardsList = listOf(...) as MutableList<SomeObject>

и, таким образом, cardsList на самом деле не является изменяемым списком. Если это так, то перед тем, как удалить предмет, сделайте следующее:

cardsList = cardsList?.toMutableList()

, а затем:

cardsList?.removeIf(condition)
0 голосов
/ 12 марта 2020

попробовать cardsList? .RemoveIf {someObject-> someObject.id == cardId}

...