«1. Обзор

Vavr — это мощная библиотека для Java 8+, построенная на основе лямбда-выражений Java. Вдохновленный языком 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>

Вы можете найти последнюю версию библиотеки на Maven Центральный репозиторий.

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. Это тип, который позволяет нам хранить либо объект, либо элемент None (эквивалент нулевого объекта):

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

5. Vavr Tuples

Точно так же в Java нет кортежей, как упорядоченные пары , тройки и т. д. В Vavr мы можем определить кортеж, который содержит до восьми объектов разных типов. Вот пример, содержащий объект 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.of(), List.fill(), List.tabulate() и т. д. Как упоминалось ранее, фабричным методом по умолчанию является List.of(), который можно сократить с помощью конструктора в стиле Scala:

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

Мы также можем создать пустой список (называемый объектом Nil в Vavr):

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.