Mastering javatuples: Create and Manipulate Tuples in Java

This guide explains why Java developers often need to return multiple values, introduces the javatuples library as a lightweight solution, and walks through adding the Maven dependency, using core tuple classes, creating tuples via factories or constructors, accessing and modifying elements, and converting tuples to collections or arrays.

Spring Full-Stack Practical Cases
Spring Full-Stack Practical Cases
Spring Full-Stack Practical Cases
Mastering javatuples: Create and Manipulate Tuples in Java

Java methods can return only a single value, so developers frequently resort to custom objects or collections to bundle multiple results, which can add complexity. The javatuples library offers a concise way to create and work with tuples ranging from one to ten elements, improving API readability and maintainability.

1. Adding the Maven Dependency

<dependency>
  <groupId>org.javatuples</groupId>
  <artifactId>javatuples</artifactId>
  <version>1.2</version>
</dependency>

2. Core Tuple Classes

Unit – one element

Pair – two elements

Triplet – three elements

Quartet – four elements

Quintet – five elements

Sextet – six elements

Septet – seven elements

Octet – eight elements

Ennead – nine elements

Decade – ten elements

Additional helper classes KeyValue and LabelValue provide more verbose pair syntax.

3. Creating Tuples

Factory methods :

Pair<String, Integer> pair = Pair.with("Pack", 33);
Quartet<String, Integer, String, Double> quartet = Quartet.with("pack", 33, "price", 2.3D);

Constructors :

Pair<String, Integer> pair = new Pair<>("Pack", 33);

Tuples can also be built from collections or iterables:

List<String> names = Arrays.asList("A1", "A2", "A3", "A4");
Quartet<String, String, String, String> q = Quartet.fromCollection(names);
Pair<String, String> p = Pair.fromIterable(names, 2);

4. Accessing Values

Typed getters getValue0(), getValue1(), … are compile‑time type‑safe:

System.out.printf("Name: %s%n", pair.getValue0());
System.out.printf("Age: %s%n", pair.getValue1());

For dynamic access, getValue(int index) returns Object and requires casting.

5. Modifying Tuples

Use setAtX(newValue) to replace an element, which returns a new tuple instance:

Pair<String, Integer> modified = pair.setAt0("xg_pack");
System.out.println(pair);
System.out.println(modified);

6. Adding and Removing Elements

add(value)

creates a larger tuple (e.g., adding to a Pair yields a Triplet), while addAtX(value) inserts at a specific position.

Triplet<String, Integer, String> triplet = pair.add("Spring Boot3实战案例200篇");
Quartet<String, String, String, String> q2 = triplet.addAt1("Python");

7. Converting to Collections or Arrays

List<Object> list = quartet.toList();
Object[] array = quartet.toArray();
System.out.println(list);
System.out.println(Arrays.toString(array));

8. Iterating Over Tuples

All tuple classes implement Iterable, so they can be used in enhanced for‑loops or with forEach:

for (Object o : quartet) {
    System.out.println(o);
}
quartet.forEach(System.out::println);

9. Additional Utility Methods

contains()

– checks if an element exists containsAll() – checks a collection of elements indexOf() – first index of an element lastIndexOf() – last index of an element

Tuples also provide standard hashCode(), equals(), and compareTo() implementations that work well with wrapper and string types.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

JavamavenCode examplestuplesjavatuples
Spring Full-Stack Practical Cases
Written by

Spring Full-Stack Practical Cases

Full-stack Java development with Vue 2/3 front-end suite; hands-on examples and source code analysis for Spring, Spring Boot 2/3, and Spring Cloud.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.