Функция takeWhile
Функция takeWhile возвращает новую коллекцию,
содержащую первые элементы исходной коллекции,
которые удовлетворяют заданному предикату (условию).
Функция проходит по элементам коллекции последовательно
и добавляет их в результат, пока условие возвращает true.
Как только встречается элемент, не удовлетворяющий условию,
процесс останавливается.
Синтаксис
inline fun <T> Array<out T>.takeWhile(
predicate: (T) -> Boolean
): List<T>
inline fun <T> Iterable<T>.takeWhile(
predicate: (T) -> Boolean
): List<T>
inline fun <K, V> Map<out K, V>.takeWhile(
predicate: (Entry<K, V>) -> Boolean
): List<Entry<K, V>>
Поддерживаемые типы коллекций
Функция takeWhile доступна для следующих типов коллекций:
ArrayListSetMapIterableSequence
Пример
Возьмем первые элементы массива чисел, которые меньше 4:
val numbers = arrayOf(1, 2, 3, 4, 5, 1, 2)
val res = numbers.takeWhile { it < 4 }
println(res)
Результат выполнения кода:
List<Int> [1, 2, 3]
Пример
Возьмем первые элементы списка строк, которые начинаются с буквы 'a':
val words = listOf("apple", "ant", "banana", "cat", "air")
val res = words.takeWhile { it.startsWith("a") }
println(res)
Результат выполнения кода:
List<String> ["apple", "ant"]
Пример
Возьмем первые элементы Map, где значение больше 10:
val map = mapOf("a" to 15, "b" to 20, "c" to 5, "d" to 25)
val res = map.takeWhile { it.value > 10 }
println(res)
Результат выполнения кода:
List<Entry<String, Int>> [a=15, b=20]
Пример
Если первый элемент не удовлетворяет условию, возвращается пустая коллекция:
val numbers = listOf(5, 4, 3, 2, 1)
val res = numbers.takeWhile { it < 3 }
println(res)
Результат выполнения кода:
List<Int> []
Смотрите также
-
функцию
take,
которая берет первые n элементов коллекции -
функцию
takeLastWhile,
которая берет последние элементы, удовлетворяющие условию -
функцию
dropWhile,
которая пропускает первые элементы, удовлетворяющие условию -
функцию
filter,
которая фильтрует все элементы по условию