# Groovy Goodness: Getting All Init And Tail Values Recursively

For a long time we could get the tail or init valuesfor a collection.
Groovy 2.5.0 adds the methods `inits`

and `tails`

for `Iterable`

objects.
These methods return a `List`

with `List`

values where the first element is the original collection and the next is the result of `init`

or `tail`

on the previous element.
This is repeated until the result of `init`

or `tail`

is an empty `List`

.

In the next example script we have a original collection of letters.
We first run the `init`

and `tail`

methods (without the `s`

). Next we look at the result of invoking `inits`

and `tails`

:

```
def letters = ('a'..'d').toList()
assert letters == ['a', 'b', 'c', 'd']
assert letters.init() == ['a', 'b', 'c']
assert letters.tail() == ['b', 'c', 'd']
// Inits returns collection of all init()
// results for an Iterable. The first element
// has the original values, the next element
// the result of init()
// of the previous element and so on until
// an empty List is the result.
assert letters.inits() == [
['a', 'b', 'c', 'd'],
['a', 'b', 'c'],
['a', 'b'],
['a'],
[]]
// Tails returns collection of all tail()
// results for an Iterable. The first element
// has the original values, the next element
// the result of tail()
// of the previous element and so on until
// an empty List is the result.
assert letters.tails() == [
['a', 'b', 'c', 'd'],
['b', 'c', 'd'],
['c', 'd'],
['d'],
[]]
```

Written with Groovy 2.5.0.