Java | Stream API のよく使う構文一覧

Java Java
スポンサーリンク

ここでは Java の Stream API の「よく使う構文」一覧 を、
初心者にも分かりやすく「何ができるか」「どう書き換えるか」「実務での使いどころ」付きでまとめます。


Stream API のよく使う構文一覧(map / filter / sorted / groupingBy など)

メソッド目的使用例実務での使いどころ
filter()条件に合う要素だけ残すlist.stream().filter(x -> x > 10)条件付き抽出(例:売上100以上だけ集計)
map()各要素を変換するlist.stream().map(String::toUpperCase)データ変換(例:文字列を大文字化、オブジェクト→別型)
sorted()並び替えるlist.stream().sorted() または sorted(Comparator.comparing(User::getAge))並び順の制御(例:日付順・スコア順など)
forEach()各要素に処理を実行list.stream().forEach(System.out::println)出力、ロギング、DB登録など副作用を許容する処理
collect()Stream を結果(List / Map / Set など)に変換.collect(Collectors.toList())結果をまとめたいとき(List などに戻す)
distinct()重複を除去list.stream().distinct()重複排除(例:ユーザーID一覧)
limit()先頭から指定件数だけ取得list.stream().limit(5)ページング処理・プレビュー表示など
skip()指定件数をスキップlist.stream().skip(10)ページング処理の2ページ目以降など
count()要素数を数えるlist.stream().count()件数確認(例:条件に合うデータ件数)
anyMatch() / allMatch() / noneMatch()条件一致の判定list.stream().anyMatch(x -> x > 0)フラグ判定(例:未処理データがあるか)
findFirst() / findAny()最初(または任意)の1件を取得list.stream().findFirst()先頭のデータだけ必要なとき
groupingBy()グループ分け(集計)Collectors.groupingBy(User::getDept)部署ごと集計・カテゴリ分けなど
flatMap()ネストされたリストをフラット化list.stream().flatMap(List::stream)List<List> → List にしたいとき

例:for文 → Stream への書き換え比較

before(拡張for文)

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> upperNames = new ArrayList<>();

for (String name : names) {
    if (name.length() > 3) {
        upperNames.add(name.toUpperCase());
    }
}

System.out.println(upperNames); // [ALICE, CHARLIE]
Java

after(Stream API)

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

System.out.println(upperNames); // [ALICE, CHARLIE]
Java

🧩 解説

  • filter():条件で絞り込み
  • map():変換
  • collect():Listに戻す

実務ベストプラクティス

観点推奨方法理由
副作用(外部変更)forEach() 内で変数を変更しない並列処理で予期せぬ動作を防ぐ
null安全Optional.ofNullable(list).orElse(Collections.emptyList())null安全な Stream 化
可読性重視3段階(filter → map → collect)に揃える処理の意図が伝わりやすい
パフォーマンス.parallelStream() は要注意小規模データでは逆に遅くなる場合あり

応用例:groupingBy + 集計

Map<String, Long> deptCount = employees.stream()
    .collect(Collectors.groupingBy(Employee::getDepartment, Collectors.counting()));

deptCount.forEach((dept, count) ->
    System.out.println(dept + " 部署: " + count + "人"));
Java

👀 例の意味

  • groupingBy(Employee::getDepartment) → 部署ごとに分類
  • counting() → 件数をカウント

実務でよく使う組み合わせ例

パターンStream構文例用途
絞り込み+変換.filter(...).map(...)条件つき加工
グループ化+集計.collect(groupingBy(..., counting()))部署別人数など
ソート+出力.sorted(...).forEach(...)並べ替えて一覧表示
平坦化+変換.flatMap(...).map(...)二重配列の一括処理
タイトルとURLをコピーしました