*

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

公開日: : 最終更新日:2015/05/01 Eclipse, Java, JUnit ,


スポンサードリンク



Java8(JDK8)では、ラムダ式の導入を前提とした、コレクションAPIの新機能が追加されました。
本エントリーでは、このコレクションAPIの新機能(強化部分)をJUnitのユニットテストを書きながら説明をさせていただきます。

利用する環境は、Java8に対応したEclipse(4.4)となります。

java.util.Listに追加されたメソッド

java.util.Listに追加されたメソッドは以下の4つです。

  1. forEach
  2. sort
  3. replaceAll
  4. removeIf

forEachメソッド

拡張for文の動作と同じです。それを以下のJUnitのユニットテストのコードで検証してみました。

ソースのコメントに記載している通りですが、ListのforEachと拡張for文が同じ動作をしていることがご理解いただけると思います。

内部処理というほどでもありませんが、両処理ともstaticなメソッドaddElementを呼び出すだけですので、
純粋にforEachと拡張for文の動きが同じである事をイメージしていただけると思います。

実行結果は以下のようになりました。
スクリーンショット 2014-05-25 14.14.37

sortメソッド

sortメソッドが導入されるまでは、java.util.Collections.sortを用いることが一般的でした。
ソート時の各要素の比較処理がデフォルトの処理でOKであれば、至極使いやすいメソッドです。
(Listの要素のオブジェクトの比較処理で昇順に並び替える)

しかし、少し変わった比較処理を利用してソートする場合は、
java.util.Comparatorインターフェースを実装したクラスが必須となります。

数値を文字列に変換したリストのソート

・java.util.Collections.sortを利用した実装例

10から0の数値を文字列に変換した値を要素に持つListを作成し
これをjava.util.Collections.sortでソートし、
ソート後のリストの要素をSystem.out.printlnで出力してみます。

なお、これ以降は、対象となるテストケースのみを記載させていただきます。

出力結果は以下のようになりました。

1の後に10が・・・、文字列として比較されているので、昇順に並ぶとそうなりますよね。

これを数値の大小比較の昇順で並べるようにすると、java.util.Comparatorインターフェースの利用が必須となります。

無名クラスのComparatorを作成して、ソート時に指定するように変更し、
ソート後に、assertEqualsで数値の昇順にソートされているかを検証するようにしました。

JUnitのテストも通りました。
スクリーンショット 2014-05-25 17.43.27

・Listのsortメソッドを利用した実装例
先ほどは、java.util.Collections.sortを利用したソートでしたが、
今度はjava.util.Listのsortメソッドを利用します。

それにしてもtestSortと同じコードが多いですね・・・、せっかくラムダ式で行数が減ってるのに・・・

先にJUnitのテストを実行結果です。成功しました。
スクリーンショット 2014-05-25 18.04.13

コードの行数は4行減っています。何より処理が直感的になっていると思います。

replaceAllメソッド

条件に合致するListの要素を全て削除するメソッドです。本当に便利です。

・ListのreplaceAllメソッドを利用しない実装例
replaceAllの便利さを際立たせるために、replaceAllを利用しない例を書いてみました。
みましたって、書けないですね・・・

java.util.CollectionsのスタティックメソッドreplaceAllの定義は
static boolean replaceAll(List, Object, Object)で、
第一引数のListに存在する第二引数を第三引数に置換するとのメソッドです。

ListのreplaceAllメソッドとの機能差が大き過ぎて代用品にはなり得ませんが
CollectionsのreplaceAll機能の範囲で同じ処理を実装してみます。

Collections.replaceAllの実装例

・ListのreplaceAllの実装例
先ほどの「java.util.CollectionsのスタティックメソッドreplaceAllを利用した例」
に相当する処理をListのreplaceAllメソッドを利用して実装してみます。

コードコメントの通り、三項演算子を利用しているので少し分かりずらいかもしれませんが、
ラムダ式だからこそできる処理です。

JUnitのテストも成功しました。
スクリーンショット 2014-05-25 19.30.00

もう少し複雑な例の検証を追加してみます。

リストの要素の文字列で、”a”または”A”から始まるものは”aから始まる”を先頭に付与する。
それ以外の文字列は何もしない。との処理となります。
追加処理は15行目からとなっております。

以上のようにCollections.replaceAllに比べると色々できます。

removeIfメソッド

JDK7以前には、これに対応するメソッドは存在していませんでした。
普通にループを回して、条件に合う要素を除去するぐらいしかできません。

removeIfメソッドを利用して同じ処理を実装すると以下のようになります。

まとめ

このように、java.util.Listに追加されたメソッドとラムダ式を併用することで、
タイピングの数も減るし、コードがスッキリして読みやすくなると言えます。

複雑なラムダ式を書いてしまうと逆に読みにくくなりますが、
Listに対する実装が格段に楽になるパターンがある事は明らかですので、是非ご利用ください。

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


スポンサードリンク



関連記事

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

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

記事を読む

JUnit入門その5[DBUnitの概要説明]

前回エントリーでは「JUnit入門その4」と題してDBUnitをEclipseで動作させるための環境

記事を読む

Eclipseの使い方(Windows環境のEclipse4.3、Eclipse4.4)

Eclipse4.4.0よりJDK8を正式サポートするそうです。 Eclipseトップレベルプ

記事を読む

JDK8(Java8)のインストール方法[Windows]

本エントリーは、Windows7 64bitにJDK8(Java8)をインストールする説明を記載させ

記事を読む

Mac(OS X)におけるJava8(jdk8)等のインストール、アップデート、アンインストール方法

Windowsとは異なりMac(OS X)ではJDKの管理(インストール、アンインストール)が難しい

記事を読む

JUnit入門その6[Eclipse4.4のJUnitプラグインとDBUnitの併用(便利に利用するためのユーティリティの作成)]

JUnit入門その4 でDBUnitの環境構築を説明させていただきました。 今回は、前提値デ

記事を読む

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

Struts1ももう過去の遺物になり、SAStrutsもEOLとなりもう半年以上が経過しました。

記事を読む

Eclipse(4.3,4.4)のJava言語のリファクタリング機能の使い方[リファクタリングの説明と「名前変更」と「移動」]

本エントリーでは、Eclipse(4.3,4.4)の「リファクタリング」機能の使い方を説明させていた

記事を読む

Eclipseの「DBViewer」プラグインの使い方[後編]

Eclipseの「DBViewer」プラグインの使い方 では、「DBViewer」プラグインの基本

記事を読む

Spring5入門[簡単なWebアプリのユニットテストをJUnit5とJMockitで作成]

Spring5入門ではJUnit4とmockitを利用したSpringのController、Ser

記事を読む

Message

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

Spring5入門[簡単なWebアプリのユニットテストをJUnit5とJMockitで作成]

Spring5入門ではJUnit4とmockitを利用したSpring

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は便利なテスト自動化ツールですし、今後は更なる利用者の

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑