Функция mapNotNull
Функция mapNotNull применяет функцию-трансформер
к каждому элементу коллекции и возвращает новую коллекцию,
содержащую только те результаты преобразования, которые
не равны null. Функция работает с массивами Array,
списками List, множествами Set и другими типами коллекций.
Синтаксис
// Для Iterable
inline fun <T, R : Any> Iterable<T>.mapNotNull(
transform: (T) -> R?
): List<R>
// Для Array
inline fun <T, R : Any> Array<out T>.mapNotNull(
transform: (T) -> R?
): List<R>
// Для Map
inline fun <K, V, R : Any> Map<K, V>.mapNotNull(
transform: (Entry<K, V>) -> R?
): List<R>
Пример
Преобразуем список строк в числа, отфильтровав null значения:
val strings = listOf("1", "2", "abc", "4", "def")
val numbers = strings.mapNotNull { it.toIntOrNull() }
println(numbers)
Результат выполнения кода:
List<Int> [1, 2, 4]
Пример
Работа с массивом строк и преобразование в числа:
val stringArray = arrayOf("10", "20", "xyz", "30")
val result = stringArray.mapNotNull { it.toIntOrNull() }
println(result)
Результат выполнения кода:
List<Int> [10, 20, 30]
Пример
Использование с множеством Set:
val numberSet = setOf("1", "2", "3", "invalid")
val validNumbers = numberSet.mapNotNull { it.toIntOrNull() }
println(validNumbers)
Результат выполнения кода:
List<Int> [1, 2, 3]
Пример
Работа с Map и преобразование значений:
val map = mapOf("a" to "1", "b" to "2", "c" to "text")
val numbersFromMap = map.mapNotNull { entry ->
entry.value.toIntOrNull()
}
println(numbersFromMap)
Результат выполнения кода:
List<Int> [1, 2]
Пример
Комплексное преобразование с возвратом null в определенных условиях:
val data = listOf(1, 2, 3, 4, 5, 6)
val evenSquares = data.mapNotNull { number ->
if (number % 2 == 0) number * number else null
}
println(evenSquares)
Результат выполнения кода:
List<Int> [4, 16, 36]
Смотрите также
-
функцию
map,
которая преобразует элементы без фильтрации null -
функцию
filterNotNull,
которая фильтрует null значения без преобразования -
функцию
filter,
которая фильтрует элементы по условию -
функцию
flatMap,
которая преобразует и объединяет вложенные коллекции