1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】Stream API と ラムダ式とは?for文との違いからやさしく解説

1
Posted at

Java 8以降のコードを見ていると、次のような書き方をよく見かけます。

list.stream()
    .filter(n -> n > 0)
    .forEach(System.out::println);

「for文じゃダメなの?」「-> って何?」と感じた方も多いのではないでしょうか。
この記事では Java初心者向け に、

  • ラムダ式とは何か
  • Stream API とは何か
  • 従来の for文との違い
  • よく使う書き方

段階的に 解説します。


1. ラムダ式とは?

一言でいうと

「処理(関数)をそのまま値として渡せる書き方」 です。


2. まずは従来の書き方(for文)

例えば、リストの中から「正の数だけを表示する」処理です。

import java.util.List;

List<Integer> list = List.of(-1, 2, 0, 5);

for (Integer n : list) {
    if (n > 0) {
        System.out.println(n);
    }
}

これは問題なく動きますが、

  • 処理が増えるとネスト(階層)が深くなる
  • 「何をしたいか」より「どう書くか」が前に出る

という欠点があります。


3. ラムダ式の基本構文

基本形

引数 -> 処理

例:

n -> n > 0

これは、

(int n) {
    return n > 0;
}

省略して書いたもの です。


4. Stream API とは?

一言でいうと

「データの流れ(Stream)に対して処理を順番につなげて書ける仕組み」 です。

  • データを集める
  • 条件で絞る
  • 変換する
  • 結果を使う

という流れを 宣言的 に書けます。


5. Stream API を使った書き方

先ほどの例を Stream API で書くと、次のようになります。

import java.util.List;

List<Integer> list = List.of(-1, 2, 0, 5);

list.stream() //データを集める
    .filter(n -> n > 0) //条件で絞り、変換する
    .forEach(n -> System.out.println(n)); //結果を使う

処理の流れ

  1. stream()
    → ListをStreamに変換
  2. filter(n -> n > 0)
    → 条件に合うものだけ残す
  3. forEach(...)
    → 要素を1つずつ処理する

6. よく使う Stream API の代表例

filter(条件で絞る)

list.stream()
    .filter(n -> n >= 0)
    .forEach(System.out::println);

map(変換する)

list.stream()
    .map(n -> n * 2)
    .forEach(System.out::println);

sum(合計する)

int sum = list.stream()
              .filter(n -> n > 0)
              .mapToInt(n -> n)
              .sum();

7. ラムダ式が使われている理由

メリット

  • コードが短くなる
  • 「何をしたいか」が読みやすい
  • nullチェックや一時変数が減る
  • バグが入りにくい

デメリット

  • 最初は読みにくい
  • デバッグが難しい場合がある

初心者のうちは「読める」ことを目標にすればOKです。


8. Stream API と for文の使い分け

観点 for文 Stream API
単純なループ
条件・変換が多い
可読性 処理次第 高い
Java 8未満

9. 初心者向け結論

  • ラムダ式は「処理を簡潔に書くための記法」
  • Stream API は「データ処理を流れとして書く仕組み」
  • 無理に使わず、読めるようになることが最優先

10. まとめ

  • -> はラムダ式
  • stream() でデータの流れを作る
  • Stream API は for文の置き換えではなく 別の考え方
  • 慣れるとコードがかなり読みやすくなる

Java初心者の方は、「処理の流れを日本語で読めるか」 を意識すると理解が早くなります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?