只要存在满足谓词的对象,我就想对集合中的对象执行转换。
调用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) {}
答案 0 :(得分:2)
除了@jonrsharpe在评论中说的内容之外,您的代码似乎在每次迭代中搜索与predicate
匹配的项目,第一次在any
中,然后在{ {1}}(他们找到相同的项目)。
您可以使用find
find