*

Java8のラムダ式とStream APIを利用してコーディング量の削減サンプル集

公開日: : 最終更新日:2016/12/05 Java , ,


スポンサードリンク



Java8になりラムダ式と「Stream API」が利用できるようになりました。
C#では一足早くラムダ式が導入されており、Javaでも早く利用したいと考えていたので、この新機能はとても嬉しかったです。
(ってもう結構時間経ってますが・・・)

Java8ではラムダ式だけでなく「Stream API」も利用できるので、この点ではC#を抜きかえしました。
(そんなことはどうでもいいですよね・・・)

とは言え、「さあラムダ式書こう!」と思ってもなかなか思い出せないんですよね・・・
集中的にコーディングしている時はサクサク出てくるのですが、ちょっと使ってないと、あれどうやって書くんだっけ?みたいな。

と言う事で、本エントリーでは、機能的な説明ではなく、実際のコーディングでよく利用するラムダ式と「Stream API」のサンプル集となります。


本エントリーの内容は以下の通りです。

  1. Listのソート処理
  2. 重複のないListの取得
  3. Listの要素の除去

 

前準備

説明で利用するテストクラス

実際の動作が意識しやすいようにJUnitのテストケースとして
サンプル実装と、期待する動作を検証する形のコードとなります。

以下がクラスの定義となります。

説明で利用するテストデータクラス

Listの要素に利用するテストデータクラスPersonは以下の通りです。

以降では、上記クラスにテストケースを追加して行きますので、追加したテストケースのみを記載させていただきます。

Listのソート処理

文字列のソート処理

Listを対象としたソート処理となります。

昇順の例

まずは昇順の例です。実際のソート処理は6行目です。文字列のcompareToの値によってソート順を判断しています。

降順の例

次に降順の例です。ソートに利用するラムダ式の値に-1をかけている点がポイントです。
ラムダ式の値に-1をかけることによって文字列のソートの判断ロジックが反転しています。

後は、テストデータと期待値が異なるだけです。

Personのソート処理

Listを対象としたソート処理となります。

年齢の昇順の例

年齢の昇順の例なのですが、まずテストメソッドの実装前にテストで利用するPersonを宣言しておきます。
このインスタンスを利用してソート対象のリストや期待値のリストを作成するためです。

ポイントは11行目です。PersonのgetAgeの大きい方が先にソートされるようになっています。

年齢の降順の例

こちらもポイントは11行目です。年齢の昇順の例との違いはpserson1のageからpserson2のageを引いた値をソート順の判定基準としていることです。
このようにpserson1とpserson2の順番を入れ替えることによって昇順と降順を反転できます。
ソート対象のデータと期待値が異なる

前の方でも記載させていただきましたが11行目は以下のように記載してもOKです。

年齢と名前の昇順の例

SQLではよくありますよねOrder Byに複数の条件を指定する時、そんな例となります。

Streamが遂に登場です。8行目ですね。
Personのageとnameで昇順ソートしています。

Personクラスはjava.lang.Comparableを実装し、compareToメソッドを実装していますので
8行目は

に書き換えることができます。

デフォルトのソートロジックが存在して、そのロジックを頻繁に利用する場合はcompareToメソッドを実装し、それを利用するとDRYなコードになりますのでオススメです。

年齢と名前の降順の例

Comparator.comparing(Person::getName)

Comparator.comparing(Person::getName)
に.reversed()を付与して結果を反転させています。

年齢と名前の昇順の例と同様に8行目は

に書き換えることができます。

重複のないListの取得

Listを対象とした処理

Streamのdistinctで実現できます。

Listの要素の除去

要素の除去と記載していますが、条件に合致した要素の取得も同じ考え方です。

Listを対象とした処理

“A”から始まらない文字列のリストを取得する例となります。

Listを対象とした処理

namaの長さが5以下でageが10以下のリストを取得する例となります。


スポンサードリンク



関連記事

Eclipse4.3のチュートリアル機能で”Hello World”アプリケーションの作成方法を説明する。

Eclipseのインストールが終了したので、各画面エリアの名称の説明、各画面エリアの使い方の説明を

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[JRAおよびクラス・フォルダー/ライブラリー]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上の「JRAおよびクラス・フォルダー

記事を読む

java8(JDK8)の新機能[大幅に強化されたコレクションAPI:java.util.List] をeclipseとJUnitで確認する。

Java8(JDK8)では、ラムダ式の導入を前提とした、コレクションAPIの新機能が追加されました。

記事を読む

Eclipse(4.4)でJava言語のリファクタリング機能の使い方[「メソッド・シグニチャーの変更」と基本的な抽出処理、及び「インライン化」、「定数の抽出」]

本エントリーでは、Eclipse(4.3)でJava言語のリファクタリング機能の使い方に引き続き

記事を読む

JUnit入門その1[Eclipse4.4のJUnitプラグインの基本的な使い方]

利用する環境の作成につきましては、「Eclipseの使い方(Windows環境のEclipse4.3

記事を読む

EclipseでAndroidアプリケーションの開発環境の構築と”Hello World!”まで

対象のOSはMac(OS X 1.9.5)とWindows7 64bitとなります。 といっても手

記事を読む

JDK8(java 8)の新機能のラムダ式の利用方法[その3:java8が用意している関数型インターフェース]

[その2:関数型インターフェースを例としたラムダ式] と説明させていただいておりますが、

記事を読む

Eclipse4.4(Java)における自動ビルド設定の変更方法の説明

Eclipse4.4における自動ビルド設定の変更方法を説明させていただきます。 自動ビルド設定の変

記事を読む

JUnit入門その9[@RunWithアノテーションを利用したテストの作成]

今回は@RunWithアノテーションを利用したテストの作成方法を説明させていただきます。 JU

記事を読む

Eclipseの使い方(Eclipse4.4のブックマーク機能とタスク機能)

今回は、Eclipseのブックマーク機能とタスク機能の説明をさせていただきます。 両機能とも効率的

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Spring5入門[STS(Spring Tool Suite)で簡単なWebアプリの典型的なユニットテストの実現方法]

前回は「Spring入門」で、Spring MVCを利用した簡単なWe

Spring5入門[STS(Spring Tool Suite)の環境作成と簡単なWebアプリの作成]

Struts1ももう過去の遺物になり、SAStrutsもEOLとなりも

Selenium入門その6[Selenium3でWebDriver(Java/Junit4)の環境を作成しEdge,Chrome,Firefoxで確認してみる]

Selenium3も3.0.1がリリースされましたし、今後は本格的にS

Selenium利用時のトラブルシューティング方法[クリック編]

Seleniumは便利なテスト自動化ツールですし、今後は更なる利用者の

Java8のラムダ式とStream APIを利用してコーディング量の削減サンプル集

Java8になりラムダ式と「Stream API」が利用できるようにな

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑