Kotlin Collection indexOf 使用引用相等 ===

Kotlin Collection indexOf using reference equality ===

在 Kotlin 中,indexOf(x) 调用 Collection returns 第一个元素的索引 equals(x)(结构相等 ==

如何获得基于引用相等性 (===) 的索引?

一个解决方案是使用 indexOfFirst:

data class Person(
    val firstName: String,
    val lastName: String,
    val age: Int
)

val targetPerson = Person("Greg", "Grimaldus", 47)

val people = listOf(
    Person("Tabitha", "Thimblewort", 38),

    Person("Shawn", "Been", 27),

    // not this one
    Person("Greg", "Grimaldus", 47),

    // this one
    targetPerson
)

people.indexOfFirst { it === targetPerson }

同样可以对任何 Collection 执行此操作,但请注意,如果正在使用的 CollectionSet,您想要的元素可能不存在,因为 Set s 使用.equals() 来消除重复元素。