Kotlin list removeAll 不适用于列表

Kotlin list removeAll is not working with a list

提问人:Cipri 提问时间:11/18/2022 最后编辑:Cipri 更新时间:11/18/2022 访问量:681

问:

为什么 Kotlin list removeAll 在此示例中不起作用:

orderList.addAll(allProducts)
orderList.removeAll(allProducts)

上面的代码将添加产品,但不会删除它们。orderList 是一个 mutableList

产品:

class Product : EmbeddedRealmObject {
var name: String = ""
var category: String = ""
var productDescription: String? = ""
var price: Float = 0F
var imagine: String? = null

}

人造人 列表 科特林 可变 可变列表

评论

2赞 Louis Wasserman 11/18/2022
从何而来?怎么样?你没有给我们太多工作机会。(一个足够破碎的人可以做到这一点,但你也没有告诉我们物体的类型是什么......orderListallProductsequals
0赞 Cipri 11/18/2022
fun MeniuOfferItem( order: Order, allProducts: List<Product>, orderList: SnapshotStateList<Product>, totalPriceWithOutDelivery: MutableState<Float> )
0赞 Cipri 11/18/2022
它在一个函数内部
1赞 Tenfour04 11/18/2022
请编辑您的问题以包含 的源代码。Product
0赞 Cipri 11/18/2022
有什么想法吗?为什么它不删除

答:

0赞 Tenfour04 11/18/2022 #1

它不起作用,因为您没有为您的类 Product 定义适当的函数。 通过查找集合中的元素来工作,其中相等性检查返回 true 与传递给它的集合中的元素。它还在后台使用一个 Set 来优化此过程,因此必须适当地定义与 相关的 。equals()hashcode()removeAllequals()hashcode()equals()

您可以使用 IDE 中的选项生成和匹配函数,也可以将其定义为类而不是普通类。 类自动具有适当的属性,并且使用主构造函数中定义的所有属性。equals()hashcode()datadataequals()hashcode()

评论

0赞 Cipri 11/18/2022
成功了!我不明白为什么简单的删除不需要等于和hashcode()
0赞 Tenfour04 11/18/2022
除非您传递相同的原始实例,否则它确实需要它们,在这种情况下,即使它忽略所有属性值,也会返回 true。equals