«возвращение» не выпрыгивает из-за Each в Котлине

У меня есть код Kotlin, почему return @ forEach не выпрыгивает из forEach ? Он продолжает цикл до тех пор, пока он не завершится, удаление reverse () не решает проблему:

rendered_words.reversed().forEach { rw -> if (rw.y - the_top > 0 && rw.y - the_top < height) { new_top = rw.y return@forEach } } smoothScrollTo(Math.min(text_y - height, new_top)) 

Я попытался заменить return @ forEach на break @ forEach, но компилятор Kotlin говорит:

Ошибка: (785, 25). Метка «@forEach» не обозначает цикл

Как насчет этого подхода?

 rendered_words.reversed().firstOrNull { rw -> rw.y - the_top > 0 && rw.y - the_top < height } ?.let { new_top = it } if(new_top != null) { smoothScrollTo(Math.min(text_y - height, new_top)) } 

потому что то, что вы пытаетесь получить здесь, – это первый элемент, который соответствует вашему состоянию, и первый / firstOrNull лучше там, чем forEach

Если вы хотите выскочить из forEach, вы должны использовать блок запуска:

 run breaker@ { rendered_words.reversed().forEach { rw -> if (rw.y - the_top > 0 && rw.y - the_top < height) { new_top = rw.y return@breaker } } }