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 Central .
3. Статические фабричные методы
Использование статического импорта:
static import io.vavr.API.*;
мы можем создать список, используя конструктор List(…):
List numbers = List(1,2,3);
вместо использования статического фабричного метода (…):
List numbers = List.of(1,2,3);
или также:
Tuple t = Tuple('a', 3);
вместо:
Tuple t = Tuple.of('a', 3);
Этот синтаксический сахар похож на конструкции в Scala/Kotlin. С этого момента в статье мы будем использовать эти сокращения.
4. Создание дополнительных
элементов
Элементы Option
не являются коллекциями, но могут быть очень полезными конструкциями библиотеки Vavr. Это тип, который позволяет нам хранить либо объект, либо элемент None
(эквивалент нулевого
объекта):
Option<Integer> none = None();
Option<Integer> some = Some(1);
5. Кортежи
Вавр
``
Точно так же в Java нет кортежей, таких как упорядоченные пары, тройки и т. д. В Vavr
мы можем определить кортеж, который содержит до восьми объектов разных типов . Вот пример, который содержит объект Character
, String
и Integer
:
Tuple3<Character, String, Integer> tuple
= Tuple('a', "chain", 2);
6. Тип попытки
Тип Try
можно использовать для моделирования вычислений, которые могут вызвать или не вызвать исключение :
Try<Integer> integer
= Success(55);
Try<Integer> failure
= Failure(new Exception("Exception X encapsulated here"));
В этом случае, если мы оценим integer.get()
, мы получим целочисленный объект 55. Если мы оценим failure.get()
, будет выдано исключение.
7. Коллекции Вавр
Мы можем создавать коллекции разными способами. Для List
мы можем использовать List.of(), List.fill(), List.tabulate()
и т. д . Как упоминалось ранее, фабричный метод по умолчанию — это List.of()
, который можно сократить с помощью конструктора стиля Scala. :
List<Integer> list = List(1, 2, 3, 4, 5);
Мы также можем создать пустой список (называемый объектом Nil в
Vavr
):
List()
Аналогичным образом мы можем создать другие виды Collection
s:
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 .