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.