カテゴリ: Java 更新日: 2026/01/12
PR
独学でJavaを学んでいる方向け
「実務レベルに到達できるか不安」「1人だと詰まることが多い」場合は、 実践重視で学べる環境を一度確認しておくのも一つの手です。
EBAエデュケーション |学習内容・サポートを見る

Javaのラムダ式でListを抽出&変換!filterとmapでスマートに操作

【ラムダ式】Listの抽出と変換:filterで抽出/mapでList→Map変換
【ラムダ式】Listの抽出と変換:filterで抽出/mapでList→Map変換

先生と生徒の会話形式で理解しよう

生徒

「Javaでリストから条件に合う要素だけ取り出したり、リストの中身を変換したいんですが、どうすればいいですか?」

先生

「それならラムダ式とfiltermapを使えば、効率よく抽出や変換ができますよ。」

生徒

「filterとmapってよく聞くけど、具体的な違いや使い方をちゃんと覚えたいです!」

先生

「それじゃあ、Listの抽出と変換について順番に見ていきましょう。」

1. filterメソッドとは?Listから条件で要素を抽出する方法

1. filterメソッドとは?Listから条件で要素を抽出する方法
1. filterメソッドとは?Listから条件で要素を抽出する方法

JavaのStream APIにおけるfilterメソッドは、リストの中から特定の条件に一致する要素だけを取り出す処理に使います。ラムダ式を組み合わせることで、読みやすくシンプルなコードになります。

例えば「文字列の長さが5文字以上の要素だけを抽出したい」といった場合、filterを使えば非常に簡単に実装できます。プログラミング初心者でも直感的に理解できるので、まずは少しずつ条件を変えて試してみると、データ抽出の感覚をつかみやすくなります。


import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class FilterExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Sato", "Suzuki", "Tanaka", "Yamada");

        // 文字列の長さが6文字以上の要素だけを抽出
        List<String> filtered = names.stream()
            .filter(name -> name.length() >= 6)
            .collect(Collectors.toList());

        System.out.println("抽出された名前:" + filtered);
    }
}

抽出された名前:[Suzuki, Yamada]

このようにfilterは条件に合う要素だけを残す処理なので、リストの中から必要なデータだけを効率的に抽出できます。簡単な条件から始めて慣れることで、複雑な条件の絞り込みも無理なく扱えるようになります。

2. mapメソッドとは?Listの要素を別の形式に変換する方法

2. mapメソッドとは?Listの要素を別の形式に変換する方法
2. mapメソッドとは?Listの要素を別の形式に変換する方法

mapメソッドは、リストの各要素を別の形式に変換したいときに使います。例えば文字列を大文字にしたり、数値に変換したり、オブジェクトの特定フィールドだけを取り出す場合など、幅広い用途で活躍します。ラムダ式と組み合わせることで、より直感的で簡潔なコードが書けるのが特徴です。

初心者の方でも、まずは簡単な例から試してみると理解しやすくなります。リスト内のデータを一括で変換できるので、手作業で1つずつ処理する必要がなくなり、作業効率もアップします。


import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class MapExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Sato", "Suzuki", "Tanaka", "Yamada");

        // 文字列を大文字に変換
        List<String> upper = names.stream()
            .map(String::toUpperCase)
            .collect(Collectors.toList());

        System.out.println("大文字に変換された名前:" + upper);
    }
}

大文字に変換された名前:[SATO, SUZUKI, TANAKA, YAMADA]

このようにmapはリストの要素を「変換する」役割を持ちます。条件付きで組み合わせたり、オブジェクトの一部だけを抽出したりする場合も、同じ流れで柔軟に処理できます。まずはこの基本操作に慣れることが、効率的なデータ処理の第一歩です。

PR

将来を見据えて、+αのスキルを身につけたい方へ

JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。

AIを学ぶならアイデミープレミアム

3. filterとmapを組み合わせて効率的にデータ処理

3. filterとmapを組み合わせて効率的にデータ処理
3. filterとmapを組み合わせて効率的にデータ処理

filterとmapは一緒に使うことができます。条件で抽出したあとに変換を行うことで、コードがスッキリまとまります。


List<String> result = names.stream()
    .filter(name -> name.length() >= 6)
    .map(String::toLowerCase)
    .collect(Collectors.toList());

System.out.println(result);

[suzuki, yamada]

この例では「6文字以上の名前だけを小文字に変換する」処理をfiltermapで実現しています。ラムダ式を使えば、このような複雑な処理も1行ずつで記述できて可読性も良好です。

4. ListからMapへ変換する:Collectors.toMapの活用

4. ListからMapへ変換する:Collectors.toMapの活用
4. ListからMapへ変換する:Collectors.toMapの活用

JavaではリストをMapに変換したいことがあります。その場合、Stream APIのCollectors.toMapを使うことで簡単に実現できます。


import java.util.Map;

Map<String, Integer> nameLengthMap = names.stream()
    .collect(Collectors.toMap(
        name -> name,
        name -> name.length()
    ));

System.out.println(nameLengthMap);

{Sato=4, Suzuki=6, Tanaka=6, Yamada=6}

このように、リスト内の要素をキーとして、長さやIDなどをバリューにすることで、検索しやすい形式に変換できます。

5. 重複キーがある場合の対処:マージ戦略を指定する

5. 重複キーがある場合の対処:マージ戦略を指定する
5. 重複キーがある場合の対処:マージ戦略を指定する

toMapを使うときにキーが重複していると例外が発生します。そのような場合は「マージ戦略」を指定して重複時の動作を定義することが重要です。


List<String> cities = Arrays.asList("Tokyo", "Osaka", "Tokyo");

Map<String, Integer> cityCount = cities.stream()
    .collect(Collectors.toMap(
        city -> city,
        city -> 1,
        Integer::sum // 重複時は合計
    ));

System.out.println(cityCount);

{Tokyo=2, Osaka=1}

Integer::sumを指定することで、同じキーが出現したときに値を合計するように処理できます。実務でもよく使うテクニックです。

6. オブジェクトListからMapへの変換例:ユーザーIDと名前を抽出

6. オブジェクトListからMapへの変換例:ユーザーIDと名前を抽出
6. オブジェクトListからMapへの変換例:ユーザーIDと名前を抽出

クラスのリストをMapに変換する場合も、ラムダ式とCollectors.toMapの組み合わせが効果的です。


class User {
    int id;
    String name;

    User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    int getId() { return id; }
    String getName() { return name; }
}

List<User> users = Arrays.asList(
    new User(1, "Alice"),
    new User(2, "Bob"),
    new User(3, "Charlie")
);

Map<Integer, String> userMap = users.stream()
    .collect(Collectors.toMap(
        User::getId,
        User::getName
    ));

System.out.println(userMap);

{1=Alice, 2=Bob, 3=Charlie}

このように、オブジェクトのリストから特定のプロパティだけをMap形式に変換するのも簡単です。

まとめ

まとめ
まとめ

Javaのラムダ式を活用したList操作は、filterによる抽出、mapによる変換、Collectors.toMapによるMap変換、重複キー処理、そしてオブジェクトListからのMap生成など、多様な用途に応用できる強力な仕組みです。とくにStream APIは、長年Javaで使われてきたfor文やループ処理を大幅に簡潔化し、読みやすく整ったコードを書く助けとなります。ラムダ式を自然に使いこなすことで、条件抽出・値変換・要素の加工・集約といった典型的な処理が直感的に記述できるようになります。 filterは「条件に合うものだけを残す」役割を担い、mapは「要素を別の形に変換する」ために使われます。この二つを組み合わせることで、複雑なデータ処理も連続した一つの流れとして処理することができ、意図が明確なコードになるという利点があります。また、Collectors.toMapを使えば、リストの中身をキーとバリューをもつMapへと自在に変換できるため、データ検索の効率化にもつながります。重複キーの扱いにはマージ戦略が必要ですが、それもラムダ式で直感的に指定できるため、柔軟性の高いデータ加工が可能です。 さらに、クラスのリストからIDや名前などのプロパティを抽出し、Mapとして扱う方法は実務で非常に重宝されます。大量データの整形、APIレスポンスの加工、DBデータの集約など、多くの場面で応用できる考え方であり、ラムダ式とStream APIを正しく理解しておくことで効率的なコード設計が実現できます。 以下に、記事内容を総括するサンプルコードを改めて整理し、振り返りとして掲載します。

ラムダ式とStream APIを使った総合サンプル


// 文字列Listに対するfilterとmapの組み合わせ
List<String> names = Arrays.asList("Sato", "Suzuki", "Tanaka", "Yamada");

List<String> processed = names.stream()
    .filter(name -> name.length() >= 6)
    .map(String::toUpperCase)
    .collect(Collectors.toList());

System.out.println(processed);
// 出力: [SUZUKI, YAMADA]

// ListからMapへの変換例
Map<String, Integer> nameLengthMap = names.stream()
    .collect(Collectors.toMap(
        n -> n,
        n -> n.length()
    ));

// ユーザーオブジェクトのリストからMapに変換
class User {
    int id;
    String name;
    User(int id, String name) { this.id = id; this.name = name; }
    int getId() { return id; }
    String getName() { return name; }
}

List<User> users = Arrays.asList(
    new User(1, "Alice"),
    new User(2, "Bob"),
    new User(3, "Charlie")
);

Map<Integer, String> userMap = users.stream()
    .collect(Collectors.toMap(
        User::getId,
        User::getName
    ));
先生と生徒の振り返り会話

生徒:「filterとmapって、ただ便利なメソッドというだけじゃなくて、流れとしてつなげるとすごく読みやすいコードになるんですね!」

先生:「そうなんだ。Stream APIは“処理の流れ”を記述するための仕組みだから、ラムダ式と相性が良いんだよ。複雑なロジックも簡潔に書けるようになる。」

生徒:「ListからMapに変換する方法も実務でよく使いそうですね。特にIDをキーにするパターン、すごくわかりやすかったです!」

先生:「データ加工では定番の考え方だから、早めに慣れておくと後で役に立つよ。重複キーの扱いも重要だから忘れずにね。」

生徒:「はい!filter → map → collect の流れも、自分の中でしっかり整理できました。次はもっと複雑な加工にも挑戦してみたいです!」

先生:「その調子。ラムダ式とStream APIは奥が深いから、いろいろ試しながら理解を深めていこう。」

Java Silver SE17(1Z0-825)の演習量を重視したい人には、 定番の問題集がこちらです。

徹底攻略 Java SE 17 Silver 問題集をAmazonで見る

※ Amazonアソシエイト・プログラムを利用しています

カテゴリの一覧へ
新着記事
PR

JavaやLinuxの検証環境に
低コストで使えるVPS

Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理
Thymeleafのth:selected属性の使い方を完全解説!初心者でもわかるセレクトボックス選択状態の指定方法
Spring MVCのルーティング設計をマスター!初心者向け@GetMappingと@PostMappingの基本と命名ルール
JSPのコメントタグとHTMLコメントの違いを徹底解説!初心者向けわかりやすい使い分け講座
PR 未経験からITエンジニアを目指す方へ

Javaを学んでいるけど、「このまま未経験で就職できるか不安」という20代向け。 学歴不問・無料サポートの就職支援という選択肢があります。

Tamesy |無料で面談予約
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得
No.3
Java&Spring記事人気No3
JavaのIntegerクラスparseIntメソッド完全ガイド!初心者でもわかる文字列から数値変換
No.4
Java&Spring記事人気No4
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.5
Java&Spring記事人気No5
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.6
Java&Spring記事人気No6
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
PR

ローカルPCに依存しない開発環境という選択肢

Java・Linuxの検証や学習環境を、クラウド上ですぐに用意できます。

Java入門

Javaの基礎を体系的に学びたい場合は、文法だけでなく 「なぜそう書くのか」まで丁寧に解説されているため、 初心者でも理解しやすい定番の1冊です。

スッキリわかるJava入門 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Java実践

ジェネリクス、enum、シールクラスなどの型設計から、 関数型プログラミング(ラムダ式・Stream API)、 JVM制御やリフレクション、外部ライブラリの活用までを扱っており、 「Javaを使えるレベル」へ進むための内容が網羅されています。

スッキリわかるJava入門 実践編 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Spring入門

Spring Frameworkの全体像から、 Webアプリ開発で必要となる主要機能までを 体系的に解説している定番の入門書です。

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発

※ 紙の書籍・電子書籍どちらでも購入できます

PR 実務経験のあるエンジニア向け

Javaなどの実務経験があり、次のキャリアを検討している方向け。 IT・ゲーム業界に特化した転職支援サービスという選択肢もあります。

転職ボックス |IT・ゲーム業界専門