1. 概要

Vavr は、Javaラムダ式の上に構築されたJava8以降用の強力なライブラリです。 Scala言語に触発されたVavrは、パターンマッチング、制御構造、データ型、永続的で不変のコレクションなど、関数型プログラミング構造をJava言語に追加します。

この短い記事では、いくつかのファクトリメソッドを使用してVavrコレクションを作成する方法を紹介します。 Vavrを初めて使用する場合は、この入門チュートリアルから始めることができます。このチュートリアルには、他の役立つ記事への参照が含まれています。

2. Mavenの依存関係

Vavr ライブラリをMavenプロジェクトに追加するには、pom.xmlファイルを編集して次の依存関係を含めます。

<dependency>
    <groupId>io.vavr</groupId>
    <artifactId>vavr</artifactId>
    <version>0.9.1</version>
</dependency>

ライブラリの最新バージョンは、MavenCentralリポジトリにあります。

3. 静的ファクトリメソッド

静的インポートの使用:

static import io.vavr.API.*;

コンストラクターList(…):を使用してリストを作成できます

List numbers = List(1,2,3);

静的ファクトリメソッドof(…):を使用する代わりに

List numbers = List.of(1,2,3);

またはまた:

Tuple t = Tuple('a', 3);

それ以外の:

Tuple t = Tuple.of('a', 3);

この構文糖衣は、Scala/Kotlinの構成に似ています。 今後は、これらの略語を記事で使用します。

4. オプション要素の作成

Option 要素はコレクションではありませんが、Vavrライブラリの非常に便利な構成になります。 これは、がオブジェクトまたはNone要素 null オブジェクトと同等)のいずれかを保持できるようにするタイプです。

Option<Integer> none = None();
Option<Integer> some = Some(1);

5. Vavrタプル

同様に、Javaには、順序対、トリプルなどのタプルは付属していません。 Vavr では、異なるタイプの最大8つのオブジェクトを保持するタプルを定義できます Character String 、およびIntegerオブジェクトを保持する例を次に示します。

Tuple3<Character, String, Integer> tuple
  = Tuple('a', "chain", 2);

6. Tryタイプ

Try タイプは、例外を発生させる場合と発生させない場合があるモデル計算に使用できます。

Try<Integer> integer
  = Success(55);
Try<Integer> failure
  = Failure(new Exception("Exception X encapsulated here"));

この場合、 integer.get()を評価すると、整数オブジェクト55が取得されます。 failure.get()を評価すると、例外がスローされます。

7. Vavrコレクション

コレクションはさまざまな方法で作成できます。 List には、 List.of()、List.fill()、List.tabulate()などを使用できます。 前述のように、デフォルトのファクトリメソッドは List.of()であり、Scalaスタイルのコンストラクターを使用して省略できます。

List<Integer> list = List(1, 2, 3, 4, 5);

空のリスト(VavrではNilオブジェクトと呼ばれます)を作成することもできます。

List()

同様の方法で、他の種類のコレクションを作成できます。

Array arr = Array(1, 2, 3, 4, 5);
Stream stm = Stream(1, 2, 3, 4, 5);
Vector vec = Vector(1, 2, 3, 4, 5);

8. 結論

Vavrタイプとコレクションの最も一般的なコンストラクターを見てきました。 セクション3で説明されている静的インポートによって提供されるシンタックスシュガーを使用すると、ライブラリ内のすべてのタイプを簡単に作成できます。

この記事で使用されているすべてのコードサンプルは、GitHubプロジェクトにあります。