Kotlin возвращает @ forEach из вложенного forEach - PullRequest
1 голос
/ 10 ноября 2019

Я хочу сделать что-то вроде break во вложенном цикле forEach для фильтрации данных в моем searchView (если содержимое данных содержит какое-либо слово в моем поиске).

val filtered = mutableListOf<EventEntity>()

rawDataList.forEach {data ->
    text.split(' ').forEach { word ->
        if (data.content.contains(word, ignoreCase = true)) {
            filtered.add(data)
            return@forEach // **There is more than one label with such a name in this scope**
        }
    }
}

Существует ли элегантное решение в моемслучай

Ответы [ 2 ]

5 голосов
/ 10 ноября 2019

Если вы когда-либо сталкивались с этой ошибкой и не сможете исправить ее с помощью встроенной функции, вы можете применить собственные метки к лямбдам, добавив name@ перед блоком:

rawDataList.forEach outer@{data ->
    text.split(' ').forEach { word ->
        if (data.content.contains(word, ignoreCase = true)) {
            filtered.add(data)
            return@outer
        }
    }
}
3 голосов
/ 10 ноября 2019

Похоже, вам нужен метод расширения any. Из javadoc:

Возвращает true, если хотя бы один элемент соответствует данному [предикату].

val filtered = rawDataList.filter { data ->
    text.split(' ').any { data.content.contains(it, ignoreCase = true) }
}.toMutableList()
...