Функция mapNotNull

Функция mapNotNull применяет функцию-трансформер к каждому элементу коллекции и возвращает новую коллекцию, содержащую только те результаты преобразования, которые не равны null. Функция работает с массивами Array, списками List, множествами Set и другими типами коллекций.

Синтаксис

kotlin// Для Iterable
inline fun <T, R : Any> Iterable<T>.mapNotNull(
  transform: (T) -> R?
): List<R>
kotlin// Для Array
inline fun <T, R : Any> Array<out T>.mapNotNull(
  transform: (T) -> R?
): List<R>
kotlin// Для Map
inline fun <K, V, R : Any> Map<K, V>.mapNotNull(
  transform: (Entry<K, V>) -> R?
): List<R>

Пример

Преобразуем список строк в числа, отфильтровав null значения:

kotlinval strings = listOf("1", "2", "abc", "4", "def")
val numbers = strings.mapNotNull { it.toIntOrNull() }
println(numbers)

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

kotlinList<Int> [1, 2, 4]

Пример

Работа с массивом строк и преобразование в числа:

kotlinval stringArray = arrayOf("10", "20", "xyz", "30")
val result = stringArray.mapNotNull { it.toIntOrNull() }
println(result)

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

kotlinList<Int> [10, 20, 30]

Пример

Использование с множеством Set:

kotlinval numberSet = setOf("1", "2", "3", "invalid")
val validNumbers = numberSet.mapNotNull { it.toIntOrNull() }
println(validNumbers)

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

kotlinList<Int> [1, 2, 3]

Пример

Работа с Map и преобразование значений:

kotlinval map = mapOf("a" to "1", "b" to "2", "c" to "text")
val numbersFromMap = map.mapNotNull { entry -> 
  entry.value.toIntOrNull() 
}
println(numbersFromMap)

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

kotlinList<Int> [1, 2]

Пример

Комплексное преобразование с возвратом null в определенных условиях:

kotlinval data = listOf(1, 2, 3, 4, 5, 6)
val evenSquares = data.mapNotNull { number ->
  if (number % 2 == 0) number * number else null
}
println(evenSquares)

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

kotlinList<Int> [4, 16, 36]

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

  • функцию map,
    которая преобразует элементы без фильтрации null
  • функцию filterNotNull,
    которая фильтрует null значения без преобразования
  • функцию filter,
    которая фильтрует элементы по условию
  • функцию flatMap,
    которая преобразует и объединяет вложенные коллекции