AMG Solution

【Java Stream API 超入門】filterメソッドを使って、条件でコレクション要素をフィルタリングする方法

feels

こんにちは。大城です。
 
このブログでは、Java SE 8で追加されたStream APIについて、プログラム初心者のときに苦労した自分が解説していきます。
 
今回は、Stream APIの基本的な使い方を、例を交えて説明します!

Stream APIとは?

Streamとは、Listなどのコレクションに対する操作をサポートするクラスです。
オブジェクトのListに対して、条件による絞り込みや合計値や平均値などの集計処理を行うメソッドが用意されています。
for文の処理に比べて、処理がわかりやすいようにコードを記述できるのが特徴です。

使い方

それではStream APIの使い方について解説していきます。
 
基本的な流れは次のとおりです。

  1. コレクションからStreamを取得
  2. Streamに対して、絞り込みや要素の変換などの中間処理を行う
  3. 変換したStreamに対して結果の取得など行う終端処理を行う

それぞれの処理について見ていきましょう。

Streamの取得

ここでは、「Tokyo」、「Chiba」、「Saitama」、「Kanagawa」、「Gunma」、「Tochigi」、「Ibaraki」、「Yamanashi」の8つの要素を持つ文字列のListを例に挙げてやってみます。
 
次のように記述し、CollectionのStreamを取得します。

中間処理

続いて、絞り込みや要素の変換などの中間処理を行います。今回はは、絞り込みを行うStream.filter()メソッドを紹介します。
 
filterメソッドは、条件でフィルタリングした新しいStreamを返却します。今回は文字列の長さが6文字以上という条件でフィルタリングを行います。
 
次のサンプルをご覧ください。

 
さらに、ここではラムダ式というものを使っています。->の左に要素を受け取る引数を置き、右に条件式を記述します。
 
filterメソッドは、条件式を満たす要素のみの新しいStreamを返却します。これにより、文字数が6文字以上の要素だけからなるstream2が取得できます。

終端処理

最後に、結果の取得や表示などの終端処理を行います。

 
Stream.foreEach()は、ストリームの要素全てに対して1つずつ処理を実施するメソッドです。filterメソッドと同じで、ラムダ式によって->の左に要素を受け取る引数、右に処理の内容を記述します。

for文との比較

上記と同じ処理をするfor文での記述と比較してみましょう。
拡張for文での記述

 
実行結果

 
Stream APIでの記述

 
実行結果

 
for文が、すべての要素を1つずつ取り出し、条件を満たすか判定して満たすなら表示という処理となっているのに対し、Streamを用いた処理は条件を満たすものだけを集めて、集めたものをすべて表示するという処理になっています。

まとめ

いかがでしたでしょうか。
 
Streamを用いた処理のほうが、コレクションの操作が直感的にわかりやすいと思います。
 
Streamには他にも要素を変換するメソッドや、変換した内容をListとして取得するメソッドなどが用意されています。次回は要素の変換などの中間処理について紹介できればと思います。
 
それでは、また。
 
 
 
 
《関連記事》

feels recruit

OSHIRO'S BLOG

大城の記事

大城の記事の最新情報をお届けいたします。

SAME CATEGORY BLOG

この記事と同様のカテゴリー記事

feelsでSFA・CRM
はじめました。
LOADING