Vavrのコレクションファクトリメソッド

Vavrのコレクションファクトリメソッド

1. 概要

Vavrは、Javaラムダ式の上に構築されたJava8以降の強力なライブラリです。 Scala言語に触発され、パターンマッチング、制御構造、データ型、永続的で不変のコレクションなどのVavr adds functional programming constructs to the Java language

この短い記事では、how to use some of the factory methods to create Vavr collectionsを示します。 Vavrを初めて使用する場合は、this introductory tutorialから始めることができます。これには、他の有用な記事への参照が含まれています。

2. メーベン依存

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


    io.vavr
    vavr
    0.9.1

ライブラリの最新バージョンは、https://search.maven.org/classic/search%7Cga%7C1%7Cg%3A%22io.vavr%22%20AND%20a%3A%22vavr%22[Maven Central repository].[#sec3]#にあります。

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要素の作成

Option要素はコレクションではありませんが、Vavrライブラリの非常に便利な構成になります。 これは、allows us to hold either an object or a None elementnullオブジェクトに相当)のタイプです。

Option none = None();
Option some = Some(1);

5. VavrTuples

同様に、Javaには、順序対、トリプルなどのタプルは付属していません。 Vavrでは、define a Tuple that holds up to eight objects of different typesを実行できます。 CharacterString、およびIntegerオブジェクトを保持する例を次に示します。

Tuple3 tuple
  = Tuple('a', "chain", 2);

6. Tryタイプ

Tryタイプは、model computations that may or may not raise an exceptionに使用できます。

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

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

7. Vavrコレクション

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

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

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

List()

同様の方法で、他の種類のCollectionsを作成できます。

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タイプとコレクションの最も一般的なコンストラクターを見てきました。 section 3で言及されている静的インポートによって提供される構文糖衣構文により、ライブラリ内のすべてのタイプを簡単に作成できます。

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