Lists (listas)
Coleção de elementos dispostos e acessíveis em uma particular sequência. A coleção pode estar ordenada ou não. Permite a ocorrência de elementos repetidos em posições distintas.
def emptyList = []
assert emptyList.isEmpty()
emptyList << 'a'
assert !emptyList.isEmpty()
List list = [3, 6, 9]
assert list instanceof java.util.List
/* Mude a condição para false, para ver o Groovy 1.7+
Power Assert em ação. */
assert list[1] == 6
assert list.get(2) == 9
list.add(12)
assert list[3] == 12
list = list + 15
assert list[4] == 15
Em Groovy, índices negativos podem ser usados para acessar os elementos com base no fim da lista
List list = [5, 10, 15, 20] assert 15 == list[-2]
Ranges (intervalos)
Listas contendo elementos com valores sequenciais.
def range = 1..5 assert range.contains(3) assert range.equals([1, 2, 3, 4, 5]) range = 'a'..<'e' assert range.equals(['a', 'b', 'c', 'd']) assert range instanceof Range assert range instanceof java.util.List
Podem ser usados para slicing de Lists e Strings, por exemplo
def list = [2, 4, 6, 8, 10] list = list[1..3] assert list == [4, 6, 8] list = list[2..0] /* Reverte a ordem da lista. */ assert list == [8, 6, 4] def text = 'This is a text' text = text[5..8] assert text == 'is a'
E em estruturas de controle
for (i in 1..5) {
print "${i} "
}
println ''
def i = 12
switch (i) {
case 2..14: println 'ok'; break
case 16..18: println 'error'; break
}
Sets (conjuntos)
Coleção que não permite a ocorrência de elementos repetidos. Equivale ao conceito matemático de conjuntos.
def set = ['1', '4', '2', '3'] as Set
set << '4'
set << '5'
assert set == (['5', '2', '4', '3', '1'] as Set)
set.removeAll(['3', '2'])
assert set == (['1', '4', '5'] as Set)
assert set.contains('4')
assert !set.contains(1)
Maps (mapas)
Objeto que relaciona chaves a valores (também conhecido como matriz associativa – associative array – ou dicionário – dictionary -, em outras linguagens). Não permite a ocorrência de chaves repetidas. Modela o conceito matemático de “função”.
def emptyMap = [:] assert emptyMap.isEmpty() /* Por padrão, as chaves de Maps são Strings. */ def map = [a: new Object(), b: 2..7] assert map.keySet().iterator().next() instanceof String assert map.a != null assert map.c == null assert map['b'] == [2, 3, 4, 5, 6, 7]
Alguns operadores e métodos adicionais para coleções
assert ['abc', 'xyz'] == ['ABC', 'XYZ']*.toLowerCase()
assert [-2, -7] == [198, 43, -2, 0, 88, -7, 88, 145].findAll {it < 0}
def s = new StringBuilder()
[3, 4, 6, 7, 9].each {if (it % 2 != 0) {s.append it}}
assert '379' == s.toString()
Dynamic objects (objetos dinâmicos) – Expandos
Estritamente falando, o Expando não é um coleção, mas apresenta certa semelhança com um Map. Ele permite a criação de objetos dinâmicos com propriedades e métodos sintéticos
def myObj = new Expando()
myObj.name = 'New object'
myObj.printName = {println name}
myObj.printName()
myObj.name = 'Old object'
myObj.printName()
Referências adicionais
