【Java】Stream APIについて解説します

Java

こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、11年目エンジニアです。

この記事では、 JavaStream APIについて

  • Stream APIとは
  • Stream APIの処理の流れ
  • Stream APIを使った場合と使わなかった場合の比較

と、この記事で丁寧に解説していきます。

前提条件:実行環境について

実行環境は以下の通りです。

OS Windows10
IntelliJ IDEAのエディション Community(無料版)
IntelliJ IDEAのバージョン 2021.3.2
プロジェクト Javaプロジェクト
SDK Oracle OpenJDK version17.0.2

Javaを動かすためにIntelliJ IDEAを使っています。
IntelliJ IDEAのインストールは、下の記事をご参考ください。

解説で使うJavaプログラムは、Sampleプロジェクトのsampleパッケージ内にある、とします。
JavaのStream APIを解説

Stream APIとは

Stream APIとは、

  • コレクション(ArrayListなど)
  • 配列
  • ファイル

の繰り返し処理を簡単に扱うことができるAPIです。
Java SE8から追加されました。

Stream APIを使ったサンプルプログラムは以下です。
これはArrayListの要素に対して文字数が偶数の要素のみ抽出し、出力するプログラムです。

実行結果は、以下になります。
JavaのStream APIを解説

ArrayListの要素で、文字数が偶数のもののみ出力できていることが確認できました。
次の章では、Stream APIの処理の流れについて解説します。

Stream APIの処理の流れ

Stream APIは

  1. Streamを生成
  2. 中間操作
  3. 終端操作

という処理の流れになります。
基本的にメソッドチェーンで続けて書きます。

図にすると以下です。
JavaのStreamAPIについて解説

前章のサンプルプログラムだと、以下にあたります。
JavaのStreamAPIについて解説
それぞれについて解説していきます。

Streamを生成

最初にコレクションなどからStreamを生成します。

Streamを生成するメソッドでよく使われるであろうメソッドを以下の表にまとめました。

メソッド 説明
【コレクション】.stream() コレクションからStreamを生成
Arrays.stream(【配列】) 配列からStreamを生成
IntStream.range int型の要素から成るIntStreamを生成

中間操作

個々の要素に対して加工・抽出などをする操作が中間操作です。
0から複数回行うことができます。
なので、中間操作は行わなくてもOKです。

中間操作でよく使われるであろうメソッドを以下の表にまとめました。

メソッド 説明
distinct ストリーム内の重複している要素をすべて削除したストリームを返すメソッド
filter 指定された条件でtrueを返す要素のみを抽出することができるメソッド
limit 指定した数にストリームを切り詰めて返すメソッド
map 要素を加工するメソッド
skip 先頭から指定した数だけストリームの要素をスキップしたストリームを返すメソッド
flatMap Streamを引数にとり、何らかの処理をしてStreamを返すメソッド
多重ループに有効

終端操作

加工・抽出などをしたStreamに対して最終的な結果を出すのが終端操作です。
中間操作は行わなくても良いですが、終端操作は必ず末尾で1回だけ行う必要があります。

終端操作でよく使われるであろうメソッドを以下の表にまとめました。

メソッド 説明
forEach Streamから要素を1つずつ取り出して処理を行うメソッド
count Streamの要素数を返すメソッド
allMatch Streamのすべての要素が指定する条件に合致するかを判定して結果を返すメソッド
noneMatch Streamのすべての要素が指定する条件に合致しないかを判定して結果を返すメソッド

Stream APIを使った場合と使わなかった場合の比較

どの程度簡単にできるか?を実際に比較します。
「Stream APIとは」の章で使ったサンプルプログラムを引用します。

Stream APIを使わず書くと以下のようになります。

どちらも結果は同じですが、Stream APIを使った方が行数が少なくなりました。
可読性も上がっているためバグを生み出しにくくなったと思います。

まとめ:Stream APIを使ってみよう!

以上がJavaのStream APIについての解説でした!

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

コメント

タイトルとURLをコピーしました