Я хотел бы выполнить преобразование для объектов в коллекции, если есть объекты, которые удовлетворяют предикату.
После вызова 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) {}