JAVA 9 – Les streams et leurs équivalents en SQL

Sylvain SPANU

Si, comme moi, vous connaissez le Java de la vieille école et que vous n’êtes pas encore expert avec les changements de la version 8, je vous propose de voir ensemble les avantages de la librairie des Stream.
Les stream permettent de parcourir, filtrer, manipuler et transformer des données. Un peu comme avec SQL.

Dans cette article, je vais faire le parallèle entre les utilisations des stream et leurs équivalents SQL.

C’est parti !

Dans nos exemples, nous utiliserons une liste contenant des données sur des personnes.
Elle contient des informations sur leurs poids, leurs tailles, etc.
tableSQL
listeJava

1. Parcourir les données

On commence par la base, comment parcourir et afficher les données :
En Java :
Stream<Personne> sp = listeJava.stream();
sp.forEach(System.out::println);

! en Java, une fois le stream parcouru il est détruit. Il faudra le recréer pour afficher la liste à nouveau.

En SQL on ferait le classique :
SELECT * FROM tableSQL

2. Filtrer les données

Imaginons qu’on veuille filtrer les personnes de plus de 50 kg.
En Java :
sp = listeJava.stream();
sp.filter(x -> x.getPoids() > 50)
.forEach(System.out::println);

En SQL :
SELECT * FROM tableSQL WHERE poids > 50

3. L’opérateur Map

L’operation map en Java permet de récupérer uniquement ce dont on a besoin :
Dans notre cas on veut seulement afficher le poids.
sp = listeJava.stream();
sp.filter(x -> x.getPoids() > 50)
.map(x -> x.getPoids())
.forEach(System.out::println);

En SQL, il suffit de mentionner la colonne dans le SELECT :
SELECT poids FROM tableSQL WHERE poids > 50

4. Compter les données

Sans surprise, on utilise l’opérateur Count.
En Java :
sp = listeJava.stream();
long count = sp.filter(x -> x.getPoids() > 50)
.map(x -> x.getPoids())
.count();

En SQL :
SELECT COUNT(*) FROM tableSQL WHERE poids > 50

5. Sommer des résultats

Et si nous avions besoin de sommer les poids des personnes de plus de 50 kg ?

En Java il faut utiliser l’opérateur Reduce:

sp = listeJava.stream();
Double sum = sp.filter(x -> x.getPoids() > 50)
.map(x -> x.getPoids())
.reduce(0.0d, (x,y) -> x+y);
System.out.println(sum);

En SQL c’est l’opérateur SUM :
SELECT SUM(poids) FROM tableSQL WHERE poids > 50

6. Créer une nouvelle banque de donnés

L’opérateur Collect permet de créer une nouvelle liste en Java :
sp = listeJava.stream();
List<Double> ld = sp.filter(x -> x.getPoids() > 50)
.map(x -> x.getPoids())
.collect(Collectors.toList());
System.out.println(ld);

L’équivalent SQL est la fonction CREATE TABLE. C’est une fonction plus compliquée qui demande le détail de chaque colonne et type de donnée, je ne vais pas la détailler ici.

Voilà, c’est déjà terminé !
Nous avons pu voir la puissance des stream rien que sur les fonctions de base, et réviser notre SQL par la même occasion 😉

Pour aller plus loin, je vous donne rendez-vous sur open classroom :
https://openclassrooms.com/fr/courses/26832-apprenez-a-programmer-en-java/5013326-manipulez-vos-donnees-avec-les-streams

 

 

facebooktwittergoogle_plusmail