Kotlinの onEach
関数を使うと、リストの各要素を処理しながら、そのままリストを返すことができます。ログ出力やデバッグ時に役立つだけでなく、メソッドチェーンを使った可読性の高いコードを実現できます。
onEachの基本的な使い方
1. リストを処理しながら、そのままリストを返す
Kotlin
val numbers = listOf(1, 2, 3, 4, 5)
val result = numbers.onEach { println("処理中: $it") }
println(result)
// 出力:
// 処理中: 1
// 処理中: 2
// 処理中: 3
// 処理中: 4
// 処理中: 5
// [1, 2, 3, 4, 5]
ポイント:
onEach
内で各要素に対する処理を実行できる- 元のリストは変更されずにそのまま返る(副作用を持たない)
2. mapとの違い
map
は新しいリストを返すが、onEach
は元のリストを返す。
Kotlin
val doubled = numbers.map { it * 2 }
println(doubled) // 出力: [2, 4, 6, 8, 10]
val debugNumbers = numbers.onEach { println("値: $it") }
println(debugNumbers)
// 出力:
// 値: 1
// 値: 2
// 値: 3
// 値: 4
// 値: 5
// [1, 2, 3, 4, 5]
どちらを使うべきか?
✅ リストを変換するなら map
✅ 処理を追加しながらリストをそのまま返すなら onEach
3. メソッドチェーンでの活用
Kotlin
val processedNumbers = numbers
.filter { it % 2 == 0 }
.onEach { println("偶数: $it") }
.map { it * 10 }
println(processedNumbers)
// 出力:
// 偶数: 2
// 偶数: 4
// [20, 40]
このように、filter
や map
と組み合わせることで、処理の流れを明確に記述 できます。
onEachを活用するメリット
- リストを変更せずにデバッグやログ出力を挟める
map
やfilter
との組み合わせでメソッドチェーンが見やすくなる- リストを変換せずにそのまま返せるので副作用を避けられる
リストのデバッグや、処理を可視化しながらスムーズにデータを扱いたい場合は、ぜひ onEach
を活用してみてください!