システムデザイン

【Java8】3分で分かるストリーム処理

 

こんにちは、AMBLクラウドネイティブ事業部の田尾歩です。好きな色はターコイズブルーです。
私は2021年にAMBLに新卒で入社しました。入社後、1年ほど銀行のシステム開発のプロジェクトで、PMO(PMのサポート)業務を経験し、現在はローコードツールを用いて通信会社の社内システムの開発を担当しています。

前回の記事「【Java 8】10分で使えるラムダ式」では、ラムダ式についてご紹介したので、今回の記事では、実際のサンプルコードを例に、繰り返し処理の実現方法である「ストリーム処理」についてご説明します。

この記事は業界経験が浅い人やJavaにあまり触れたことが無い人に向けた内容となっています。記事を通して少しでもJavaに対する理解を深めていただけたら幸いです。

前提

ストリーム処理について説明する前にまずは前提となるインタフェースとラムダ式について軽く説明したいと思います。

インタフェースとは

インタフェースとは処理の実装と呼び出しを分離する考え方です。
例えば、一般的な家庭にある「コンセント」も、インターフェースの一つです。
コンセントの利用者は、コンセントの裏側でどんなことをしているのか理解していませんが、コンセントにプラグを刺すだけで、電気を利用 (送電という機能を利用) できます 。

詳しくは以下の記事に掲載していますので、合わせてご確認ください。
【Java 8】5分でわかる関数型プログラミング

ラムダ式とは

ラムダ式とは、簡単に説明すると主に関数型インターフェースで使用され、よりシンプルにコードを書くためのものです。

こちらについても詳しくは以下の記事に掲載していますので、合わせてご確認ください。
【Java 8】10分で使えるラムダ式

 

ストリーム処理

ストリーム処理とは

ストリーム処理とはListやMap、配列等の要素の集合に対して、繰り返し処理をパイプラインで実行するためのテンプレートのことです。
が、これだけではどういうことかイメージしにくいと思いますので図を使って説明したいと思います。

 

ストリーム処理のメリットとデメリット

メリット
 ・ラムダ式による処理の記載が可能なため、コード量を削減できる 
 ・実装パターンが決まっているため、コードの可読性が高まる 

 ・フィルタや、変換機能などjava側で便利なAPIが提供されている

デメリット 
 ・ラムダ式によって変数の型定義を省略することができるが、
  省略しすぎるとコードの可読性が下がる可能性がある
 ・標準の関数型インタフェースを利用する際実装できないものがある

実装例

以下実装例になります。
上で説明したイメージと紐づけながら見ることでより理解が深まると思います。

 

まとめ

今回記事では、ストリーム処理についてをご説明させていただきました。
ストリーム処理に限らず、これらの手法は知っているとコードを書く効率が上がるので是非様々な手法を調べてみてください
まずは足がかりとして今回の記事の内容を通してストリーム処理への理解が少しでも深まれば幸いです。