【发布时间】:2018-08-28 09:09:07
【问题描述】:
我遇到了 kotlin equals 函数来比较两个相同类型的列表。它适用于带有数据类的纯 Kotlin。
我在 Kotlin 项目中使用 Java 库,其中回调方法在 X 秒的时间间隔内返回对象列表。每次调用都尝试将旧列表与新列表进行比较,但即使项目相同且相等,equals 也会返回 false。
val mOldList: MutableList<MyObject>()? = null
override fun updatedList(list: MutableList<MyObject>){
// other code
if (mOldList.equals(list)) // false everytime
}
这是因为 Java 库中的 equals 方法吗?
列表比较的替代建议将不胜感激。
【问题讨论】:
-
两个列表都是java List?
-
也许是不同类型的列表?例如
ArrayList与LinkedList。 -
是的,两者都是 java 列表。它们不是不同的类型;我在 x 秒后将列表与新更新的列表进行比较。
-
当您说“项目相同且相等”时,您是什么意思? Referential equality or structural equality? IE。
MyObject会覆盖equals()方法吗? -
在Java中,“换句话说,如果两个列表包含相同顺序的相同元素,则它们被定义为相等。此定义确保equals方法在List接口的不同实现中正常工作。”所以如果它返回false,肯定有不同的元素。 (并且不同的列表类型应该无关紧要。)
标签: java kotlin kotlin-interop