Vous avez le droit de lire le sujet jusqu'au bout, cela vous donnera une bonne idée de là où on veut aller !
La classe
NumericSeq est un conteneur de valeurs numériques homogènes de type
int,
long ou
double mais qui en interne stocke les valeurs
dans un tableau de
long.
En effet, un entier long 64 bits (
long) peut contenir un
int 32 bits ;
il suffit de faire
cast en
int si on veut obtenir la valeur comme un
int.
Un entier long 64 bits (
long) peut aussi contenir un nombre flottant 64 bits (
double)
car c'est la même taille en mémoire, il faut être capable pour cela de voir un
double comme
un
long sans changer la représentation bit à bit. La méthode
Double.doubleToRawLongBits(double valeur) renvoie le
long correspondant bit à bit
au
double passé en paramètre et la méthode
Double.longBitsToDouble(long value) fait
l'opération inverse.
La classe
NumericSeq permet de créer des séquences d'
int, de
long ou
de
double de la façon suivante.
NumericSeq<Integer> seq1 = NumericSeq.ints(1, 4, 7); // séquence d'entiers 32 bits
NumericSeq<Long> seq2 = NumericSeq.longs(123L, -45L); // séquence d'entiers 64 bits
NumericSeq<Double> seq3 = NumericSeq.doubles(48.0, 123.25); // séquence de flottants 64 bits
La classe
NumericSeq possède, de plus,
-
les méthodes add(value), get(index) et size qui permettent respectivement d'ajouter
un élément, d'obtenir un élément à un index donné et d'obtenir le nombre de valeurs dans la séquence.
-
un mécanisme qui permet d'afficher une séquence : les valeurs sont séparées par des virgules suivies d'un espace, et le tout entre '[' et ']'
var seq1 = NumericSeq.ints(1, 4, 7);
System.out.println(seq1); // affiche [1, 4, 7]
-
un mécanisme qui permet de parcourir la séquence avec une boucle, comme dans l'exemple ci-dessous :
var seq1 = NumericSeq.ints(1, 4, 7);
for(var value: seq1) {
System.out.println("value: " + value);
}
-
une méthode addAll(anotherSequence) qui permet d'ajouter les valeurs d'une autre séquence
à la séquence courante si elles ont le même type de valeurs numériques
-
une méthode map(function, factory) qui renvoie une nouvelle séquence créée en utlisant la méthode de création factory et qui contient les valeurs de retour de l'appel à la fonction
prise en premier paramètre pour chaque valeur de la séquence courante.
var seq1 = NumericSeq.ints(1, 4, 7);
var seq4 = seq1.map(v -> v * 2.5, NumericSeq::double);
System.out.println(seq4); // affiche [2.5, 10.0, 17.5]
-
les méthodes toNumericSeq(factory) et stream(), qui permettent respectivement
de collecter des valeurs dans un NumericSeq et de renvoyer un Stream.