只要某些条件成立,Kotlin惯用法处理集合

时间:2018-05-21 21:27:01

标签: kotlin

只要存在满足谓词的对象,我就想对集合中的对象执行转换。

调用transform(x)后,谓词不再适用于x,但可能适用于其之前未保留的其他y。但是,该算法可以保证终止。

如何改进?

while( col.any (p -> predicate(p)) ) {
    val member = col.find { p -> predicate(p) }!!
    transform(member)
}

修改

将@jonrsharpe和@hotkey的答案结合起来,以下所有内容都更简洁有效

do {
    val member = col.find { predicate(it) }?.also { transform(it) }
} while (member != null)


do {
} while (col.find { predicate(it) }?.also { transform(it) } != null)



while (col.find { predicate(it) }?.also { transform(it) } != null) {}

1 个答案:

答案 0 :(得分:2)

除了@jonrsharpe在评论中说的内容之外,您的代码似乎在每次迭代中搜索与predicate匹配的项目,第一次在any中,然后在{ {1}}(他们找到相同的项目)。

您可以使用find

将其减少为仅一次搜索
find