Chapitre Travailler avec Groovy
Manipulation des collections avec Groovy
Cette leçon présente comment manipuler les collections avec Groovy.
Manipulation des collections avec Groovy
Liste et maps
java.util.List
et java.util.Map
sont certaines les interfaces les plus utilisées en Java.
Malheureusement Java ne fournit pas beaucoup de support pour les créer et les manipuler facilement.
Le type de données le mieux supporté par le langage est le tableau.
Accès des listes comme des tableaux
- gestion de la taille des tableaux dynamiques
- possibilité de stocker des types différents
def roman = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII'] // #1 List of Roman numerals
assert roman[4] == 'IV' // #2 List access
roman[8] = 'VIII' // #3 List expansion
assert roman.size() == 9
Une Map est un type de stockage de données qui associe une valeur à une clé.
Les Maps retrouvent les valeurs par une clé alors que les listes les retrouvent par leur position.
Déclaration de map
Initialisation de map
Example de ranges
def x = 1..10
assert x.contains(5)
assert x.contains(15) == false
assert x.size() == 10
assert x.from == 1
assert x.to == 10
assert x.reverse() == 10..1
for (int i=0; i< upperBound; i++){
// do something with i
}
if (x >= 0 && x <= upperBound) {
// do something with x
}
left..right
left..<right
def result = '' //|#1 Range for iteration
(5..9).each { element -> //|#1
result += element //|#1
} //|#1
assert result == '56789' //|#1
assert 5 in 0..10 //|#2 Range for classification
assert (0..10).isCase(5) //|#2
//|#2
def age = 36 //|#2
switch(age){ //|#2
case 16..20: insuranceRate = 0.05 ; break //|#2
case 21..50: insuranceRate = 0.06 ; break //|#2
case 51..65: insuranceRate = 0.07 ; break //|#2
default: throw new IllegalArgumentException() //|#2
} //|#2
assert insuranceRate == 0.06 //|#2
def ages = [20, 36, 42, 56] //|#3 Range as filter
def midage = 21..50 //|#3
assert ages.grep(midage) == [36, 42] //|#3
List flat = [0, *myList, 4] // #4 Spread
assert flat == [0, 1, 2, 3, 4]
120
respective constructor. The resulting list can still be used with the subscript
operator. In fact, this works with any type of list, as we show here with type
java.util.LinkedList.
Lists can be created and initialized at the same time by calling toList on
ranges.
Listing 4.5 Specifying lists
List myList = [1, 2, 3]
assert myList.size() == 3
assert myList[0] == 1
assert myList instanceof ArrayList
List emptyList = []
assert emptyList.size() == 0
List longList = (0..1000).toList()
assert longList[555] == 555
List explicitList = new ArrayList()
explicitList.addAll(myList) // #1 Fill from myList
assert explicitList.size() == 3
explicitList[0] = 10
assert explicitList[0] == 10