考虑以下两个类:
这段代码明显的低效之处在于,当找到一个匹配项时它不会停止对listOfA的迭代(而且只能有一个匹配项,需要明确说明)。使用filter或find方法的方法也有类似的问题,需要对至少一个ObjectB列表进行冗余迭代。
在kotlin标准库中是否有适用于这种情况的东西?
class ObjectA(val objectBs: List<ObjectB>,
val otherFields: Any)
class ObjectB(val key: String,
val otherFields: Any)
任务是在ObjectA列表中查找并返回具有特定键的第一个ObjectB。
仅实现目标相当简单,但是以漂亮而高效的方式实现似乎相当棘手。我找不到任何类似于“firstIn”或“findIn”函数,它允许我在迭代ObjectA列表时返回类型不同于ObjectA的其他类型。
我有一些方法,其中一种看起来非常好,但效率非常低:
listOfA.mapNotNull {
it.objectBs.firstOrNull {
item -> item.key == wantedKey
}
}.firstOrNull()
这段代码明显的低效之处在于,当找到一个匹配项时它不会停止对listOfA的迭代(而且只能有一个匹配项,需要明确说明)。使用filter或find方法的方法也有类似的问题,需要对至少一个ObjectB列表进行冗余迭代。
在kotlin标准库中是否有适用于这种情况的东西?
list.asSequence()
吗? - Andrii Turkovskyi