Функция filterValues
Функция filterValues выполняет фильтрацию значений
в объекте Map по заданному предикату. Возвращает новую
Map, содержащую только те пары ключ-значение, для которых
значение удовлетворяет условию предиката.
Синтаксис
inline fun <K, V> Map<out K, V>.filterValues(
predicate: (V) -> Boolean
): Map<K, V>
Параметры
predicate - функция-предикат, которая принимает значение
типа V и возвращает Boolean. Если возвращается
true, то пара ключ-значение включается в результирующую Map.
Возвращаемое значение
Новая неизменяемая Map типа Map, содержащая
только те элементы, для которых предикат вернул true.
Для каких типов коллекций работает
Функция filterValues работает только с коллекциями
типа Map и её наследниками. Не применяется к:
ArrayListSetIterableSequence
Пример
Отфильтруем Map, оставив только значения больше 10:
val numbers = mapOf("a" to 1, "b" to 15, "c" to 8, "d" to 20)
val res = numbers.filterValues { it > 10 }
println(res)
Результат выполнения кода:
{b=15, d=20}
Пример
Отфильтруем Map строк, оставив только строки длиной больше 3:
val words = mapOf(1 to "cat", 2 to "elephant", 3 to "dog", 4 to "butterfly")
val res = words.filterValues { it.length > 3 }
println(res)
Результат выполнения кода:
{2=elephant, 4=butterfly}
Пример
Отфильтруем изменяемую Map, оставив только чётные числа:
val mutableMap = mutableMapOf("x" to 2, "y" to 5, "z" to 8)
val res = mutableMap.filterValues { it % 2 == 0 }
println(res)
Результат выполнения кода:
{x=2, z=8}
Пример
Использование сложного предиката для фильтрации:
val data = mapOf("john" to 25, "mary" to 30, "peter" to 17, "anna" to 22)
val res = data.filterValues { age -> age >= 18 && age <= 25 }
println(res)
Результат выполнения кода:
{john=25, anna=22}
Смотрите также
-
функцию
filter,
которая фильтрует элементы по ключу и значению -
функцию
filterKeys,
которая фильтрует элементы по ключам -
функцию
mapValues,
которая преобразует значения Map -
функцию
any,
которая проверяет наличие хотя бы одного элемента, удовлетворяющего условию