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を活用して、スマートなデータ処理を実現しましょう!
 
  
  
  
   
    
