首页 > 解决方案 > 在Kotlin中查找外部列表的最后出现索引值

问题描述

嘿,我有嵌套列表,我想找到外部列表的最后一次出现索引值。我试图在Kotlin Doc中搜索。我尝试了一些代码,但失败了。那么我该如何以有效的方式做到这一点。

fun main() {
    val value = listOf(
        Group(0, mutableListOf(GroupValue(true, "1"))),
        Group(1, mutableListOf(GroupValue(true, "2"))),
        Group(2, mutableListOf(GroupValue(false, "3"))),
        Group(3, mutableListOf(GroupValue(true, "4"))),
        Group(4, mutableListOf(GroupValue(false, "5"))),
        Group(5, mutableListOf(GroupValue(true, "6"))),
        Group(6, mutableListOf(GroupValue(true, "6"), GroupValue(false, "7"))),
        Group(7, mutableListOf(GroupValue(true, "6"), GroupValue(false, "7"))),
        Group(8, mutableListOf(GroupValue(true, "6"), GroupValue(true, "7"), GroupValue(false, "7"))),
        Group(9, mutableListOf(GroupValue(false, "6"), GroupValue(true, "7"))),
        Group(10, mutableListOf(GroupValue(true, "7")))
    )

    val result = value.asSequence().flatMap { it.value }.indexOfLast { conversationItems ->
        conversationItems?.isRead == false
    }
    println("result $result")

}

团体

data class Group(
    val key: Int,
    val value: MutableList<GroupValue?>
)

集团价值

data class GroupValue(
    val isRead: Boolean? = null,
    val id: String? = null
)

获取上述代码的输出是

result 13

预期产出

result 9

我不知道我在上述逻辑中做错了什么

标签: androidkotlin

解决方案


13 是正确的,因为您使用flatMap了 ,这会将您的所有列表变成一个列表,并且您将获得那个更大的组合列表中的项目的索引。

根据您所说的预期,我猜您想要包含false isReadGroupValue 的最后一个组的外部列表的索引。我会这样做:

val result = value.indexOfLast { group ->
    group.value.any { it?.isRead == false }
}

推荐阅读