Javaのラムダ式とStreamのmapの使い方を完全ガイド!初心者でも理解できる変換処理
生徒
「Javaのラムダ式って、どうやって使えばいいんですか?特にmapメソッドの使い方がよくわかりません…」
先生
「良いところに気づきましたね。mapはJavaのStreamAPIの中でもよく使われる便利なメソッドなんですよ。」
生徒
「ラムダ式と一緒に使うと、何ができるんですか?」
先生
「例えば、リストの中の数値を全部2倍にしたり、文字列を大文字に変換したりといった処理が、驚くほどシンプルに書けるようになりますよ。」
生徒
「それは便利そうですね!実際に使い方を教えてください!」
先生
「では、ラムダ式とmapメソッドの基本から応用までを一緒に学んでいきましょう。」
1. Javaのラムダ式とは?初心者向けにやさしく解説
Javaのラムダ式は、メソッドを簡潔に表現するための記法です。特にStreamAPIと組み合わせることで、処理の流れを直感的に記述できるようになります。通常、繰り返し処理にはfor文や拡張for文を使っていましたが、ラムダ式を使えばそれを省略できます。
例えば、次のようにリストの中の要素をすべて出力するコードがあります:
List<String> names = Arrays.asList("Tanaka", "Suzuki", "Sato");
names.forEach(name -> System.out.println(name));
このname -> System.out.println(name)がラムダ式です。->の左側が引数、右側が処理内容を示しています。
2. Streamのmapメソッドとは?変換処理の基本
mapメソッドは、JavaのStreamで使われる変換処理用のメソッドです。リストなどの各要素に対してラムダ式で処理を加え、その結果を新しいStreamとして返します。例えば、整数のリストをすべて2倍にしたい場合、以下のように書けます。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> doubled = numbers.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
System.out.println(doubled);
[2, 4, 6, 8, 10]
このように、mapを使えばfor文を使わずに、簡潔に要素変換ができます。
3. mapとラムダ式を使った文字列処理の実例
次に、文字列のリストをすべて大文字に変換する例を見てみましょう。ラムダ式とmapメソッドを使えば、一行で変換が可能です。
List<String> words = Arrays.asList("java", "stream", "lambda");
List<String> upperWords = words.stream()
.map(word -> word.toUpperCase())
.collect(Collectors.toList());
System.out.println(upperWords);
[JAVA, STREAM, LAMBDA]
このように、文字列処理でもラムダ式+mapの組み合わせはとても便利です。
4. mapはどんな時に使う?初心者でも理解しやすい使いどころ
mapメソッドは、以下のような場面で特に役立ちます。
- ・数値の変換(例:金額の消費税加算)
- ・文字列の整形(例:メールアドレスのドメイン変更)
- ・オブジェクトの一部プロパティ抽出(例:名前だけ抽出)
つまり、「あるデータを別の形に変換したい」ときにmapは使われるのです。
5. 複雑な変換処理にも対応!mapでオブジェクトの加工
たとえば、ユーザー情報のリストからユーザー名だけを取り出したい場合でもmapは使えます。以下の例ではUserクラスから名前を取り出しています。
class User {
private String name;
public User(String name) { this.name = name; }
public String getName() { return name; }
}
List<User> users = Arrays.asList(new User("Yamada"), new User("Kobayashi"));
List<String> names = users.stream()
.map(user -> user.getName())
.collect(Collectors.toList());
System.out.println(names);
[Yamada, Kobayashi]
このように、オブジェクトを扱う場面でも、ラムダ式+mapの活用は非常に強力です。
6. mapの処理をわかりやすく分けて書く方法
ラムダ式が複雑になってきた場合は、処理内容を別メソッドに切り出すと読みやすくなります。例えば次のようにできます。
private static String formatName(User user) {
return "User: " + user.getName();
}
List<String> formatted = users.stream()
.map(Main::formatName)
.collect(Collectors.toList());
ラムダ式をそのまま書く代わりに、Main::formatNameのようにメソッド参照を使うと、さらに可読性がアップします。
7. ラムダ式とmapを使うときの注意点
初心者の方が気をつけるべきポイントもいくつかあります。
- ・
nullが含まれていると例外が出る可能性がある - ・副作用(
System.out.printlnなど)は極力mapでは避ける - ・
mapは「変換」であり、「フィルタリング」にはfilterを使う
これらのルールを意識すると、Javaのラムダ式やStream APIを安全に扱えるようになります。