Функция takeLastWhile

Функция takeLastWhile возвращает список, содержащий последние элементы коллекции, которые удовлетворяют заданному предикату. Функция проходит по коллекции с конца и добавляет элементы в результат до тех пор, пока предикат возвращает true. Как только встречается элемент, не удовлетворяющий условию, процесс останавливается.

Синтаксис

kotlininline fun <T> Array<out T>.takeLastWhile(
  predicate: (T) -> Boolean
): List<T>
kotlininline fun ByteArray.takeLastWhile(
  predicate: (Byte) -> Boolean
): List<Byte>
kotlininline fun ShortArray.takeLastWhile(
  predicate: (Short) -> Boolean
): List<Short>
kotlininline fun IntArray.takeLastWhile(
  predicate: (Int) -> Boolean
): List<Int>
kotlininline fun LongArray.takeLastWhile(
  predicate: (Long) -> Boolean
): List<Long>
kotlininline fun FloatArray.takeLastWhile(
  predicate: (Float) -> Boolean
): List<Float>
kotlininline fun DoubleArray.takeLastWhile(
  predicate: (Double) -> Boolean
): List<Double>
kotlininline fun BooleanArray.takeLastWhile(
  predicate: (Boolean) -> Boolean
): List<Boolean>
kotlininline fun CharArray.takeLastWhile(
  predicate: (Char) -> Boolean
): List<Char>
kotlininline fun <T> Iterable<T>.takeLastWhile(
  predicate: (T) -> Boolean
): List<T>
kotlininline fun String.takeLastWhile(
  predicate: (Char) -> Boolean
): String

Поддерживаемые типы коллекций

Функция takeLastWhile работает со следующими типами коллекций:

Для Map функция takeLastWhile не применяется напрямую, но можно использовать её для ключей, значений или записей.

Пример

Возьмем последние элементы массива чисел, которые больше 2:

kotlinval numbers = arrayOf(1, 2, 3, 4, 5, 1, 2)
val res = numbers.takeLastWhile { it > 2 }
println(res)

Результат выполнения кода:

kotlinList<Int> [4, 5]

Пример

Возьмем последние символы строки, которые являются цифрами:

kotlinval text = "abc12345"
val res = text.takeLastWhile { it.isDigit() }
println(res)

Результат выполнения кода:

kotlinString "12345"

Пример

Возьмем последние элементы списка, которые начинаются с буквы 'c':

kotlinval list = listOf("apple", "banana", "cherry", "date", "cherry", "elderberry")
val res = list.takeLastWhile { it.startsWith("c") }
println(res)

Результат выполнения кода:

kotlinList<String> ["cherry"]

Пример

Если ни один элемент не удовлетворяет условию, возвращается пустая коллекция:

kotlinval numbers = listOf(1, 2, 3, 4, 5)
val res = numbers.takeLastWhile { it > 10 }
println(res)

Результат выполнения кода:

kotlinList<Int> []

Смотрите также

  • функцию take,
    которая берет первые n элементов коллекции
  • функцию takeLast,
    которая берет последние n элементов коллекции
  • функцию takeWhile,
    которая берет первые элементы, удовлетворяющие условию
  • функцию dropLastWhile,
    которая пропускает последние элементы, удовлетворяющие условию