Pour ce TP nous allons utiliser la même configuration Maven qu'habituellement.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.uge.series</groupId>
<artifactId>series</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<release>19</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M7</version>
</plugin>
</plugins>
</build>
</project>
Comme précédemment, créer un projet Maven,
au niveau du premier écran, cocher
create simple project
puis passer à l'écran suivant en indiquant
Next.
Pour ce TP, le groupId est
fr.uge.series , l'artefactId est
series et
la version est
0.0.1-SNAPSHOT. Puis cliquer sur
Finish.
Le but de cet exercice est d'implanter une structure de données dite
time-series.
Une structure de données
time-series est une liste de valeurs.
Chaque valeur possède aussi un marqueur temporel (un
timestamp) associé.
Ça permet, par exemple, de stocker les valeurs d'un capteur de température d'une pièce pendant la
journée.
Voici un exemple d'utilisation
var timeSeries = new TimeSeries<String>();
timeSeries.add(23L, "hello");
timeSeries.add(34L, "time");
timeSeries.add(70L, "serie");
On créé une instance de
TimeSeries paramétrée par le type d'élément que l'on veut y ajouter,
puis on ajoute les éléments précédés de leur
timestamp.
Les
timestamps doivent être croissants : leur valeur est toujours supérieure ou égale à la valeur du
timestamp précédent.
Les éléments insérés ne peuvent pas être
null.
Par ailleurs, on peut créer des index (de type
Index) qui représentent uniquement certaines valeurs
à l'intérieur de la structure de données
TimeSeries.
Un
Index est un tableau d'entiers rangés en ordre croissant, contenant les indices
des éléments dans la
TimeSeries.
Par exemple, avec la
TimeSeries créé précédemment, un
Index contenant les indices
[0, 2]
correspond aux éléments "hello" et "serie".
Il y a deux façons de créer des
Index. On peut soit demander de créer un
Index contenant
tous les indices, avec la méthode
index(); soit créer un
Index contenant les indices
des éléments pour lesquels une lambda prise en paramètre est vraie, avec la méthode
index(filter)
Voici un exemple de création et d'utilisation des index.
var timeSeries = new TimeSeries<String>();
...
var index = timeSeries.index(s -> s.startWith("t"));
System.out.println(index.size()); // 1 (il n'y a que "time" qui renvoie vrai pour le filtre)