*

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入門その3[Selenium WebDriver(Java/Junit4)の使い方]

WebDriverでは、予め中継サーバを起動しなくても、テスト実行時にブラウザ拡張機能や、OSのネイ

記事を読む

java8(JDK8)の新機能をEclipseとJUnitで[インターフェースのデフォルト実装の使い方]

本エントリーでは、まずSAM Typeの説明をさせていただきます。 その流れの中で「java8の新

記事を読む

Java超入門 with Eclipse[2:プリミティブ型(基本データ型)とは]

他のプログラミング言語と同様に、Javaにもデータ型が存在します。 Java超入門の第2回では、プ

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

JDK8(java 8)の新機能のラムダ式の利用方法[その1:概要]

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

記事を読む

Javaによる非同期処理入門その1[非同期処理の実装方法の概説]

Javaによる非同期処理に関するエントリーを前々から作成したいと思っていたのですが、ついに作成してみ

記事を読む

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

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

記事を読む

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

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

記事を読む

Message

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

Spring5入門[AbstractRoutingDataSourceで複数DBへの接続とトランザクション制御]

今回はSpring MVCから複数データベースに接続とトランザクション

Eclipse Oxygen Update 1 (4.7.1)を利用してJUnit5の公式ガイドの内容を実践してみる。

いよいよJUnit5が本格的に利用できる環境が整ってきました。

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となりも

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑