Exemple d’un codage en Stream Java

Supposons que j’ai des nombres à traiter, séparés par des points virgules:

String donneesToSplit ="14;15;8;10;7;9";

Je voudrais obtenir au final une sortie de type CSV mais avec des zéro sur 4 chiffres, comme ceci:

14,0015,0008,0010,0007,0009

J’aurai donc un code Java qui va divisé donneesToSplit en tableau puis passer chaque élément du tableau pour ajouter les zéro puis reconstruire une chaîne de caractères en ajoutant une virgule pour au final enlevé la dernière virgule:

 String[] splited = donneesToSplit.split(";");
 String donneesCsv = "";
 for(int i=0; i<splited.length; i++){ 
    String nombre = splited[ i ];
    nombre = ("0000" + nombre).substring(nombre.length());
    donneesCsv += nombre + ",";
 }
 donneesCsv = donneesCsv.substring(0, donneesCsv.length()-1);

Un classique du parcours total dans un tableau avec un jolie conversion du nombre avec 4 chiffre que l’on trouve sur Internet.

La version Java 8, un peu plus complexe à lire mais je pense qu’elle est intéressante et surtout plus performante.

 List<String> numbers = Arrays.asList( donneesToSplit.split(";") ); 
 donneesCsv = numbers.stream()
 .map(i -> ("0000" + i).substring(i.length()) )
 .collect(Collectors.joining(",") );

On peut noter la conversion en List<String> qui est souvent une forme de données classique surtout après extraction de données depuis une base de données.

La nouvelle fonction stream() qui ouvre des fonctionnalités très performante surtout en parallélisant certains calcul.

La fonction map() qui injecte une méthode d’une classe anonyme, bref qui fait le parcours total de la liste et qui extrait le i ième élément pour lui appliquer une opération.

Enfin, la méthode collect qui assure le retour des données en une seule structure. Cette méthode exploite le Collectors qui évite la concaténation des chaines de caractères et d’enlever la dernière virgule.

Les dernières évolutions de Java 8 et bientôt Java 9 sont très performante pour traiter des « types de problématiques ». Il y a une évolution marqué pour améliorer les traitements de type filtrages et conversions de données en masse, surtout des données faiblement structurées que l’on retrouve dans le Big Data.

 

A propos Pierre Jean

Ingénieur de Recherche CERIS Centre d'Enseignement et de Recherche en Informatique et Systèmes IMT Mines Alès UMR Euromov DHM Plus de détails sur Pierre JEAN
Ce contenu a été publié dans Développement. Vous pouvez le mettre en favoris avec ce permalien.