Collections

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

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*


7 × cinco =

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>