28 nov. 2021

Les opérations intermédiaires de Java Stream

Salut, aujourd’hui nous sommes à la version 17 de java ce qui ne nous empêche pas ici Autour du code de faire un tour d’horizon sur les opérations intermédiaires de l'API Stream dévoilé depuis la version 8 de Java ;

Comprenons avec des exemples les opérations suivantes :
  • filter()
  • map()
  • flatMap()
  • distinct()
  • sorted()
  • peek()
  • limit()
  • skip()

Avant de voir une série d'exemples pour comprendre les opérations cités, nous reprendre a une question,
Qu’est-ce qu’un Stream ?

Un Stream est une séquence d'éléments sur laquelle on peut effectuer un groupe d'opération de manière séquentielle ou parallèle contrairement a une collection ou une structure de donnée de manière générale.
D’ailleurs l’implémentation Java définit bien une interface spécifique : public interface Stream<T>

filter()

La méthode Java Stream filter() peut être utilisée pour filtrer les éléments d'un flux Java Stream. La méthode filter prend un prédicat (une condition) qui est appelé pour chaque élément du flux. Si l'élément doit être inclus dans le flux résultant, le prédicat doit renvoyer true. Si l'élément ne doit pas être inclus, le prédicat doit renvoyer false.

Voici un exemple d'un filtre avant l'arrivée de Java 8 :































Output:



Voici un exemple d'appel de la méthode Java Stream filter() :




















Output:


map()


La méthode Java Stream map() convertit (map) un élément en un autre objet. Par exemple, si vous avez une liste de chaînes de caractères, elle peut convertir chaque chaîne en minuscule, en majuscule, en une sous-chaîne de la chaîne d'origine ou en quelque chose de complètement différent. 

Voici un exemple de Java Stream map() : 

Si vous avez une liste de chaînes et que vous voulez la convertir en une liste d'entiers, vous pouvez utiliser map() pour le faire.



















Output:




flatMap()

La fonction Stream.flatMap(), comme son nom l'indique, est la combinaison d'une map (converti on) et d'une opération flat (aplatissement). Cela signifie que vous appliquez d'abord la fonction map, puis vous aplatissez le résultat. 

Pour comprendre en quoi consiste l'aplatissement d'un flux, considérez une structure comme [ [1,2,3], [4,5,6], [7,8,9] ] qui a "deux niveaux". Il s'agit en fait d'une grande liste contenant trois autres listes. L'aplatir signifie la transformer en une structure à "un niveau", par exemple [ 1,2,3,4,5,6,7,8,9 ], c'est-à-dire une seule liste.

Par exemple : Dans le programme ci-dessous, vous pouvez voir que nous avons trois listes qui sont fusionnées en une seule en utilisant une fonction flatMap().





Output:



distinct()


La méthode Java Stream distinct() est une opération non terminale qui renvoie un nouveau Stream qui ne contiendra que les éléments distincts du flux d'origine. Les éventuels doublons seront éliminés. 

Voici un exemple de la méthode Java Stream distinct() :




Output:




sorted()


La méthode Java Stream sorted() est une opération non terminale qui renvoie un nouveau Stream qui contiendra les éléments triés du flux d'origine. Les éventuels doublons seront éliminés. 

Voici un exemple de la méthode Java Stream sorted() :



Output:


La méthode Java Stream stored() utilise un comparateur.

 

peek()


La méthode Java Stream peek() est une opération non terminale qui prend une interface Consumer comme paramètre. Le Consumer sera appelé pour chaque élément du flux. La méthode peek() renvoie un nouveau Stream qui contient tous les éléments du flux d'origine.

L'objectif de la méthode peek() est, comme elle le dit, de regarder les éléments du flux, et non de les transformer. Gardez à l'esprit que la méthode peek ne lance pas l'itération interne des éléments du flux. Vous devez appeler une opération terminale pour cela. 

Voici un exemple de la méthode Java Stream peek() :




Output:




limit()


La méthode Java Stream limit() permet de limiter le nombre d'éléments d'un flux à un nombre donné à la méthode limit() en tant que paramètre. La méthode limit() renvoie un nouveau flux qui contiendra au maximum le nombre d'éléments donné. 

Voici un exemple de la méthode limit() de Java Stream :




Output:



skip()


La méthode Java Stream skip() permet de sauter le nombre d'éléments d'un flux à un nombre donné à la méthode skip() en tant que paramètre. La méthode skip() renvoie un nouveau flux. 

Voici un exemple de la méthode skip() de Java Stream :




Output:


20 nov. 2019

Un Pool de connexion ?

Qu'est-ce qu'un pool de connexion?

Un pool de connexions est un magasin de connexions à une base de données qui peut être utilisé et (plus important encore) réutilisé pour se connecter à une base de données.
Pourquoi a-t-on besoin de pools de connexion?

Les connexions aux bases de données sont coûteuses à créer et à maintenir. Les raisons en sont nombreuses, notamment:

    Établissement d'une connexion réseau au serveur de base de données
    Analyser les informations de la chaîne de connexion
    Authentification de l'utilisateur
    Initialisation de la connexion à la base de données dans la base de données
    Établissement de contextes transactionnels

Désormais, si vous avez une application Web avec un seul utilisateur, vous pouvez simplement créer une connexion à une base de données au début de la session utilisateur, puis la fermer à la fin. Cependant, ce scénario est hautement improbable!

Imaginez maintenant un scénario plus réaliste dans lequel des centaines, voire des milliers d’utilisateurs, accéderont à votre application Web. Si la session de chaque utilisateur crée une connexion à une base de données, vos utilisateurs subiront un retard pendant l'installation de cette connexion et, deuxièmement, les performances globales de votre système se détérioreront.

Alors, en réponse à la question de savoir pourquoi ils sont nécessaires, ils améliorent à la fois les performances et l'évolutivité de votre système.
Comment fonctionnent les pools de connexion?

Plutôt que de créer une nouvelle connexion chaque fois que nécessaire, un pool de connexions est créé au démarrage de votre serveur d'applications. Ces connexions peuvent ensuite être utilisées et réutilisées. Lorsqu'une nouvelle connexion est requise, le pool recherche une connexion disponible. S'il en existe un, il est renvoyé au demandeur. Si aucune n'est disponible, la demande est mise en file d'attente ou une nouvelle connexion est établie en fonction du nombre de connexions déjà présentes dans le pool et de la configuration de celui-ci. Une fois la connexion établie, au lieu de la fermer, la connexion est renvoyée au pool de connexions pour être utilisée par le demandeur suivant.

OK.

17 juil. 2017

Intégration MDL et JSF





Bonjour, voici une idée pour utiliser du MDL dans vos future projet #jsf une intégration complète du MDL avec les vues xhtml (facelets), utilisant le support ajax et bien évidement la notion de templating, les bean managed de type CDI et bien d'autre techno de la JEE.

le code source ici: https://github.com/ricken07/javatuto/tree/master/jsf

17 mai 2017

GlassFish Encodage, modifier la valeur par Defaut

Le codage par défaut de GlassFish renvoie le texte codé en ISO-8859-1. Ceci est basé sur le protocole de transfert hypertexte - HTTP / 1.1 RFC 3.7.1 Canonicalisation et valeurs par défaut du texte qui requiert le codage par défaut pour que le texte soit renvoyé de cette manière.

Les développeurs d'applications Web utilisent souvent UTF-8 comme encodage dans leurs applications, mais ne parviennent pas à modifier les valeurs par défaut du serveur. Cela s'applique à tout ce qui utilise Servlets (y compris JSP et JSF). Vous pouvez modifier les valeurs par défaut dans sun-web.xml ou glassfish-web.xml comme indiqué ci-dessous en définissant l'élément de codage de paramètres.

<glassfish-web-app>
    <!-- Modifiez le codage de caractères par défaut de ISO-8859-1 à UTF-8 -->
    <parameter-encoding default-charset="UTF-8"/>
</glassfish-web-app>


fichier glassfich-web.xml










source: JHON YEARY

13 févr. 2017

JSF2.2: configuration du "répertoire des ressources"

JSF 2.2 permet de configurer le répertoire utilisé pour la recherche de ressources.

Par défaut, le mécanisme de gestion des ressources introduit dans JSF 2.0 recherche les ressources dans les emplacements suivants:

  1. /resources sous le dossier racine de l'application Web.
  2. /META-INF/ressources dans les fichiers JAR.

L'inconvénient de /ressources est que tout dans ce dossier est accessible de l'extérieur par défaut. Cela n'est pas toujours souhaitable, en particulier pour les composants composites. Par conséquent, JSF 2.2 introduit le paramètre de contexte javax.faces.WEBAPP_RESOURCES_DIRECTORY pour spécifier le répertoire utilisé pour la recherche de ressource dans le système de fichiers de l'application Web (point 1 dans la liste ci-dessus). Dans la liste ci-dessous, le chemin est déplacé vers                    /WEB-INF/resources par exemple. Ressources à l'intérieur /WEB-INF peut être consulté par JSF, mais jamais du "monde extérieur".

illustration:

24 janv. 2017

A la découverte de Vraptor4

Lorsque vous travaillez avec Java pour le Web, il existe de nombreux frameworks MVC possibles basés sur l'action. VRaptor est l'un de ceux et il est opensource. Sa 4ème version est basée sur CDI 1.1 et offre une haute productivité à vos application Web. Cet article vous donnera une brève aperçu de son intégration.

1. Créer un projet web maven;
2. Edité votre fichier pom.xml, pour ajouter les dépendences de Vraptor:

 <dependency>
            <groupId>br.com.caelum</groupId>
            <artifactId>vraptor</artifactId>
            <version>4.2.0-RC3</version>
  </dependency>

3. Mettre en place votre contrôleur.

Tout ce que vous devez faire pour démarrer votre premier contrôleur sur VRaptor est d'annoter votre classe avec @Controller, et le framework compte sur ses conventions URL et JSP pour vous permettre d'utiliser le moins de configurations possible. Ceci est un exemple:

HelloController.java


index.jsp, votre vue se trouvant à l'emplacement: WEB-INF/jsp/hello/index.jsp


la documentation sur Vraptor4, ici docs
le code source du projet helloVraptor, ici source

Le monde a-t-il vraiment besoin d'un autre framework frontend ?

Le monde a-t-il vraiment besoin d'un autre framework frontend ? Je pense que c'est le cas, car différents cadres ont différentes hyp...