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 element(nullオブジェクトに相当)のタイプです。
Option none = None();
Option some = Some(1);
5. VavrTuples
同様に、Javaには、順序対、トリプルなどのタプルは付属していません。 Vavrでは、define a Tuple that holds up to eight objects of different typesを実行できます。 Character、String、および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にあります。