【问题标题】:Remove element from mutable list - removeIf从可变列表中删除元素 - removeIf
【发布时间】:2020-03-12 13:44:24
【问题描述】:
    private var cardsList: MutableList<SomeObject>? = null
    val condition = Predicate<SomeObject> {
        it.id() == cardId
    }

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

    getNavigator()?.initRecycleView(cardsList)

我在列表中有一个元素;我已验证 id 与 cardId 相同。

当我运行上面的代码时,我希望在调用removeIf 之后,cardsList 将为空,但它仍然有一个元素。

removeIf() 在使用condition 调用时返回true

我不明白。

【问题讨论】:

    标签: android kotlin arraylist mutablelist


    【解决方案1】:

    您实际上并没有从cardsList 中删除任何内容。
    cardsList?.toMutableList() 创建另一个可变列表对象并从中删除。
    你应该这样做:

    cardsList?.removeIf(condition)
    

    编辑您的评论。
    我怀疑尽管您在执行以下操作的过程中已将cardsList 声明为MutableList

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

    所以cardsList 实际上并不是一个可变列表。
    如果是这种情况,那么在您移除该项目之前,请执行以下操作:

    cardsList = cardsList?.toMutableList()
    

    然后:

    cardsList?.removeIf(condition)
    

    【讨论】:

    • private var cardsList: MutableList&lt;SomeObject&gt;? = null 如果直接在cardList上使用removeIf(),我得到了异常:UnsupportedOperationException;
    • 如何将商品添加到cardList?
    • 你是对的。我从服务器响应中更新了cardsList(谁用List 响应),而不是添加项目,我使用= 运算符; `cardList = serverResponse.data()`
    【解决方案2】:

    尝试 cardsList?.removeIf {someObject->someObject.id == cardId}

    【讨论】:

    • 如果直接在cardList上使用removeIf(),我得到了异常:UnsupportedOperationException
    猜你喜欢
    • 1970-01-01
    • 2017-03-05
    • 2014-12-19
    • 2013-11-25
    • 2016-05-29
    相关资源
    最近更新 更多