Kotlin vs Java: mapNotNull を活用してリストのnullを簡単に除去する方法

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

リストのデータを変換しつつ、null を取り除きたい場面はよくあります。Javaでは Stream API を活用する必要がありますが、Kotlinでは mapNotNull を使うことで、より簡潔に記述できます。


Javaの場合(Stream を使用)

Javaでリストを変換しつつ null を除外するには、filter(Objects::nonNull) を併用する必要があります。

Java
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> names = List.of("Alice", null, "Bob", "Charlie", null);
        
        List<String> filteredNames = names.stream()
            .filter(Objects::nonNull) // nullを除外
            .map(String::toUpperCase) // 変換
            .collect(Collectors.toList());

        System.out.println(filteredNames);
    }
}

出力結果

[ALICE, BOB, CHARLIE]

この方法では、filter(Objects::nonNull)map(String::toUpperCase) を組み合わせる必要があり、やや冗長になります。


Kotlinの場合(mapNotNull を使用)

Kotlinでは、mapNotNull を使うことで、変換とnullの除去を1つの関数で行えます。

Kotlin
fun main() {
    val names = listOf("Alice", null, "Bob", "Charlie", null)

    val filteredNames = names.mapNotNull { it?.uppercase() }

    println(filteredNames)
}

出力結果

[ALICE, BOB, CHARLIE]

mapNotNull を使うことで、null をフィルタリングしながらリストを変換でき、シンプルで直感的なコードになります。


mapNotNull を使うメリット

  1. コードの簡潔化
    • filterNotNull().map {} を書かなくても、mapNotNull だけで完結。
  2. 可読性の向上
    • 何をしているのかが直感的に理解しやすい。
  3. パフォーマンスの向上
    • filterNotNull()map() を分けて処理するより、mapNotNull() で一括処理する方が効率的。

まとめ

比較項目Java (Stream API)Kotlin (mapNotNull)
Null除去の方法filter(Objects::nonNull) を併用mapNotNull だけで完結
コードの簡潔さ冗長になりがちシンプルで直感的
パフォーマンスfilter + map で処理1つの関数で効率的に処理

Kotlinの mapNotNull を活用することで、リストの変換とnullの除去を一括で行い、可読性の高いコードを書くことができます。これからKotlinを学ぶ方は、ぜひ活用してみてください!

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