リストのデータを変換しつつ、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 を使うメリット
- コードの簡潔化
filterNotNull().map {}
を書かなくても、mapNotNull
だけで完結。
- 可読性の向上
- 何をしているのかが直感的に理解しやすい。
- パフォーマンスの向上
filterNotNull()
とmap()
を分けて処理するより、mapNotNull()
で一括処理する方が効率的。
まとめ
比較項目 | Java (Stream API ) | Kotlin (mapNotNull ) |
---|---|---|
Null除去の方法 | filter(Objects::nonNull) を併用 | mapNotNull だけで完結 |
コードの簡潔さ | 冗長になりがち | シンプルで直感的 |
パフォーマンス | filter + map で処理 | 1つの関数で効率的に処理 |
Kotlinの mapNotNull
を活用することで、リストの変換とnullの除去を一括で行い、可読性の高いコードを書くことができます。これからKotlinを学ぶ方は、ぜひ活用してみてください!