Kotlin:查找嵌套项的列表或序列
Kotlin: list or sequence to find nested item
我有一个列表,其中的每个元素都包含一个内部列表。
我需要获取外部列表的一个元素,其中至少一次满足内部列表的指定条件。
我写了这样的代码:
outerList?.find {
!it.items.isNullOrEmpty() && it.items?.any { item ->
item.isVisible == visibility &&
item.progress == currentProgress
} == true
}?.let { outerItem ->
currentItem = outerItem
// here some logic
} ?: run {
currentItem = null
// here some logic
}
但我不确定这段代码是否有效。也许您应该使用序列而不是列表?
您能否告诉我哪种解决方案在我的案例的执行时间和内存消耗方面最有效?
序列在这里无济于事,因为您只对外部列表执行一项操作,对内部列表执行一项操作。
您的 !it.items.isNullOrEmpty()
检查对于您跟进的 ?.any
完全多余,因此您可以将其删除。也许最简洁的写法是:
outerList?.find {
it.items.orEmpty().any { item ->
item.isVisible == visibility && item.progress == currentProgress
}
}
永远不要这样做:?.let { ... } ?: run { }
。除了可读性很差之外,它还容易出错。如果您不小心从 let
块中 return 为 null,则 run
块也将意外地 运行。
我有一个列表,其中的每个元素都包含一个内部列表。 我需要获取外部列表的一个元素,其中至少一次满足内部列表的指定条件。 我写了这样的代码:
outerList?.find {
!it.items.isNullOrEmpty() && it.items?.any { item ->
item.isVisible == visibility &&
item.progress == currentProgress
} == true
}?.let { outerItem ->
currentItem = outerItem
// here some logic
} ?: run {
currentItem = null
// here some logic
}
但我不确定这段代码是否有效。也许您应该使用序列而不是列表? 您能否告诉我哪种解决方案在我的案例的执行时间和内存消耗方面最有效?
序列在这里无济于事,因为您只对外部列表执行一项操作,对内部列表执行一项操作。
您的 !it.items.isNullOrEmpty()
检查对于您跟进的 ?.any
完全多余,因此您可以将其删除。也许最简洁的写法是:
outerList?.find {
it.items.orEmpty().any { item ->
item.isVisible == visibility && item.progress == currentProgress
}
}
永远不要这样做:?.let { ... } ?: run { }
。除了可读性很差之外,它还容易出错。如果您不小心从 let
块中 return 为 null,则 run
块也将意外地 运行。