Partner – Microsoft – NPI (cat=Java)
announcement - icon

Microsoft JDConf 2024 conference is getting closer, on March 27th and 28th. Simply put, it's a free virtual event to learn about the newest developments in Java, Cloud, and AI.

Josh Long and Mark Heckler are kicking things off in the keynote, so it's definitely going to be both highly useful and quite practical.

This year’s theme is focused on developer productivity and how these technologies transform how we work, build, integrate, and modernize applications.

For the full conference agenda and speaker lineup, you can explore JDConf.com:

>> RSVP Now

1. Overview

Vavr is a powerful library for Java 8+, built on top of Java lambda expressions. Inspired by the Scala language, Vavr adds functional programming constructs to the Java language, such as pattern-matching, control structures, data types, persistent and immutable collections, and more.

In this short article, we’ll show how to use some of the factory methods to create Vavr collections. If you are new to Vavr, you can start with this introductory tutorial which in turn has references to other useful articles.

2. Maven Dependency

To add the Vavr library to your Maven project, edit your pom.xml file to include the following dependency:

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

You can find the latest version of the library on the Maven Central repository.

3. Static Factory Methods

Using the static import:

static import io.vavr.API.*;

we can create a list using the constructor List(…):

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

instead of using the static factory method of(…):

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

or also:

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

instead of:

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

This syntactic sugar is similar to the constructs in Scala/Kotlin. From now on, we’ll use these abbreviations in the article.

4. Creation of Option Elements

The Option elements are not collections but they can be very useful constructs of the Vavr library. It’s a type that allows us to hold either an object or a None element (the equivalent of a null object):

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

5. Vavr Tuples

Similarly, Java doesn’t come with tuples, like ordered pairs, triples, etc. In Vavr we can define a Tuple that holds up to eight objects of different types. Here’s an example that holds a Character, a String and an Integer object:

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

6. The Try Type

The Try type can be used to model computations that may or may not raise an exception:

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

In this case, if we evaluate integer.get() we’ll obtain the integer object 55. If we evaluate failure.get(), an exception will be thrown.

7. Vavr Collections

We can create collections in many different ways. For Lists, we can use List.of(), List.fill(), List.tabulate(), etc. As mentioned before, the default factory method is List.of() that can be abbreviated using the Scala style constructor:

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

We can also create an empty list (called a Nil object in Vavr):

List()

In an analogous way, we can create other kinds of 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. Conclusion

We’ve seen the most common constructors for the Vavr types and collections. The syntactic sugar provided by the static imports mentioned in section 3 makes it easy to create all the types in the library.

You can find all the code samples used in this article in the GitHub project.

Course – LS (cat=Java)

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – REST with Spring (eBook) (everywhere)
Comments are closed on this article!