*

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


スポンサードリンク



関連記事

java8(JDK8)の新機能のラムダ式の利用方法をEclipseとJUnitで説明[その2:関数型インターフェースを例としたラムダ式]

「JDK8(Java 8)の新機能のラムダ式の利用方法」では、 指定できる場所の概説と関数型インタ

記事を読む

利用すると生産性が格段に向上する厳選Eclipseショートカット集

今回のエントリーは、利用すると生産性が格段に向上するEclipseのショートカット集となります。

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[ビルド・パス上のソース・フォルダー]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上のソース・フォルダーの利用方法を説

記事を読む

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

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

記事を読む

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

Java8になりラムダ式と「Stream API」が利用できるようになりました。 C#では一足早く

記事を読む

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 ↑