Dernière modification : Dec 08 , 2024

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

Manipulation des collections avec Groovy

Created by Sylvain Leroy