Kotlinでは、リストの要素を変換しながらnull
を自動的に除外できる mapNotNull
という便利な関数が用意されています。通常のmap
とfilterNotNull
を組み合わせるよりも簡潔に記述でき、コードの可読性を向上させることができます。
mapNotNullの基本的な使い方
mapNotNull
は、リストの各要素を変換し、null
になった要素を自動的に除去した新しいリストを作成します。
Kotlin
val numbers = listOf("10", "20", "abc", "30", null, "40")
val validNumbers = numbers.mapNotNull { it?.toIntOrNull() }
println(validNumbers) // 出力: [10, 20, 30, 40]
このように、toIntOrNull()
によって変換できない "abc"
や null
が自動的に除外され、数値に変換できたものだけがリストとして返されます。
mapNotNullの活用例
1. APIやデータベースからの取得データをクリーンアップ
Kotlin
val rawData: List<String?> = listOf("100", null, "200", "error", "300")
val cleanedData = rawData.mapNotNull { it?.toIntOrNull() }
println(cleanedData) // 出力: [100, 200, 300]
データ取得時にnull
やエラー値が含まれていても、mapNotNull
を使えば安全にクリーンなリストを作成できます。
2. ユーザー入力のバリデーション
Kotlin
val userInput = listOf("5", "15", "", "20", null, "abc")
val validInputs = userInput.mapNotNull { it?.takeIf { it.isNotBlank() }?.toIntOrNull() }
println(validInputs) // 出力: [5, 15, 20]
空文字やnull
を除外しつつ、整数に変換できるデータだけを抽出する場合に便利です。
3. ネストされたデータの抽出
Kotlin
data class User(val name: String?, val age: Int?)
val users = listOf(
User("田中", 30),
User(null, 25),
User("佐藤", null),
User("鈴木", 40)
)
val validAges = users.mapNotNull { it.age }
println(validAges) // 出力: [30, 25, 40]
オブジェクトの特定フィールドを抽出する際にも、mapNotNull
を使うことで簡潔に記述できます。
mapNotNullを使うメリット
map
とfilterNotNull
を組み合わせるよりシンプルに書ける- データのクリーニング処理が直感的に記述できる
- バリデーションを含めた変換が容易になる
KotlinのmapNotNull
を活用して、スマートなデータ処理を実現しましょう!