*

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で確認する。」は以上です。


スポンサードリンク



関連記事

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

Seleniumは便利なテスト自動化ツールですし、今後は更なる利用者の増加が見込まれます。 とは言

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[ビルド・パス上に必要なプロジェクト/プロジェクト参照の追加]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上の「ビルド・パス上に必要なプロジェ

記事を読む

Eclipse(4.3,4.4)の使い方[パースペクティブのツールバーのカスタマイズ(「コマンド・グループ可用性」と「ショートカット」タブ)]

「パースペクティブのカスタマイズ」画面には、以下の4つのタブが存在しております。 ツール・バ

記事を読む

JUnit入門その3[Eclipse4.4のJUnitプラグインとMockフレームワークのJMockitの併用の基本]

JUnit入門その3ではMockフレームワークのJMockitを利用したテスト環境の構築と使い方につ

記事を読む

JUnit入門その4[Eclipse4.4のJUnitプラグインとDBUnitの併用(環境構築と基本)]

JUnit入門その1 JUnit入門その2[Eclipse4.4のJUnitプラグインのasse

記事を読む

Java超入門 with Eclipse[1:Eclipse環境の作成とEclipseの使い方の説明]

「JDT betaを利用してJDK8(java 8)対応のEclipse開発環境を作成する」では、最

記事を読む

Java超入門 with Eclipse[4:クラスに関する基礎知識(修飾子とクラスとインスタンスと変数)]

前回は、Javaの基本であるクラスの基本的な知識をざっくりと説明させていただいたあと、 packa

記事を読む

JUnit入門その8[Eclipse4.4のJUnitプラグインのテストケースのカバレッジをEclEmmaを利用して測定してみる]

今回は「EclEmma」を使って、テストのカバレッジの測定を行うエントリーとなります。 「djUn

記事を読む

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

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

記事を読む

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

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

記事を読む

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 ↑