Groovy Goodness: Using Tuples
A tuple is an ordered, immutable list of elements.
Groovy has it's own groovy.lang.Tuple
class.
We can create an instance of a Tuple
by providing all elements that need to be in the Tuple
via the constructor.
We cannot add new elements to a Tuple
instance or remove elements.
We cannot even change elements in a tuple, so it is completely immutable.
This makes it very useable as return value for a method where we need to return multiple values.
Groovy also provides a Tuple2
class that can be used for tuple instance of only two elements. The elements are typed in a Tuple2
instance.
In the following example we see different uses of the Tuple
and Tuple2
classes:
def tuple = new Tuple('one', 1, new Expando(number: 1))
assert tuple.size() == 3
// To get the value of an element
// at a certain position we use
// the get(index) method.
assert tuple.get(0) == 'one'
// We can use the [] syntax to
// get elements from the tuple.
assert tuple[1] == 1
// We can use methods added to the
// Collection API by Groovy.
assert tuple.last().number == 1
// We cannot change the tuple.
try {
tuple.add('extra')
assert false
} catch (UnsupportedOperationException e) {
assert e
}
try {
tuple.remove('one')
assert false
} catch (UnsupportedOperationException e) {
assert e
}
try {
tuple[0] = 'new value'
assert false
} catch (UnsupportedOperationException e) {
assert e
}
// Create a Tuple with fixed size
// of 2 elements, a pair.
def pair = new Tuple2('two', 2)
// The Tuple2 class has extra methods
// getFirst() and getSecond() to
// access the values.
assert pair.first == 'two'
assert pair.second == 2
An example on how to use a `Tuple2` as return value for a method:
def calculate(String key, Integer... values) {
// Method return a Tuple2 instance.
new Tuple2(key, values.sum())
}
// Use multiple assignment to
// extract the values from the tuple.
// Tuple2 has typed objects.
def (String a, Integer b) = calculate('sum', 1, 2, 3)
assert a == 'sum'
assert b == 6
Written with Groovy 2.4.6.