Функция onEach

Функция onEach применяет указанное действие к каждому элементу коллекции и возвращает исходную коллекцию. Отличается от forEach тем, что возвращает коллекцию, что позволяет использовать её в цепочках вызовов. Работает с массивами, списками, множествами, отображениями и другими типами коллекций.

Синтаксис

kotlin// Для Iterable (List, Set)
inline fun <T> Iterable<T>.onEach(action: (T) -> Unit): Iterable<T>
kotlin// Для Array
inline fun <T> Array<T>.onEach(action: (T) -> Unit): Array<T>
kotlin// Для Map
inline fun <K, V> Map<K, V>.onEach(action: (Entry<K, V>) -> Unit): Map<K, V>
kotlin// Для Sequence
inline fun <T> Sequence<T>.onEach(action: (T) -> Unit): Sequence<T>

Пример

Использование onEach с массивом чисел:

kotlinval numbers = arrayOf(1, 2, 3, 4, 5)
val result = numbers.onEach { println("Processing: $it") }

println("Original array preserved:")
result.forEach { print("$it ") }

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

kotlinProcessing: 1
Processing: 2
Processing: 3
Processing: 4
Processing: 5
Original array preserved:
1 2 3 4 5

Пример

Использование onEach со списком строк:

kotlinval letters = listOf('a', 'b', 'c', 'd', 'e')
val modified = letters
  .onEach { println("Letter: $it") }
  .map { it.uppercaseChar() }

println("Modified list:")
println(modified)

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

kotlinLetter: a
Letter: b
Letter: c
Letter: d
Letter: e
Modified list:
[A, B, C, D, E]

Пример

Использование onEach с отображением (Map):

kotlinval map = mapOf("one" to 1, "two" to 2, "three" to 3)
val resultMap = map.onEach { 
  println("Key: ${it.key}, Value: ${it.value}") 
}

println("Map after onEach:")
println(resultMap)

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

kotlinKey: one, Value: 1
Key: two, Value: 2
Key: three, Value: 3
Map after onEach:
{one=1, two=2, three=3}

Пример

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

kotlinval set = setOf(10, 20, 30, 40, 50)
val resultSet = set.onEach { 
  if (it > 25) println("Large number: $it") 
}

println("Set contents:")
println(resultSet)

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

kotlinLarge number: 30
Large number: 40
Large number: 50
Set contents:
[10, 20, 30, 40, 50]

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

  • функцию forEach,
    которая выполняет действие, но не возвращает коллекцию
  • функцию forEachIndexed,
    которая предоставляет индекс элемента при выполнении действия
  • функцию map,
    которая преобразует элементы и возвращает новую коллекцию