mapNotNullでnullを含むリストをスマートに変換

Kotlin
記事内に広告が含まれる場合があります

Kotlinでは、リストの要素を変換しながらnullを自動的に除外できる mapNotNull という便利な関数が用意されています。通常のmapfilterNotNullを組み合わせるよりも簡潔に記述でき、コードの可読性を向上させることができます。

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を使うメリット

  1. mapfilterNotNullを組み合わせるよりシンプルに書ける
  2. データのクリーニング処理が直感的に記述できる
  3. バリデーションを含めた変換が容易になる

KotlinのmapNotNullを活用して、スマートなデータ処理を実現しましょう!

タイトルとURLをコピーしました