Java 8: Collections, Stream et opérations IO par l’exemple. Déboguer les streams

 

Ce billet aborde par la pratique le nouveau design pattern de gestion des collections en java 8 : Stream.

En java 8, le design iterator est abandonné au profit d'une meilleure conception basée sur le Stream.

Nous pouvons dire brièvement, qu'en java 8, la programmation impérative est remplacée par la programmation déclarative (penser au langage  SQL).

Les exemples démos choisis sont des opérations sur les répertoires et fichiers avec des assertions sur le nombre de lignes et sur les contenus de ces fichiers.

Nous donnons aussi une manière de déboguer les streams.

Voici les ingrédients utilisés dans ce blog: Java 8, Stream, l'api AsssertJ pour le test Junit.

Pratiquons le Design Pattern Delegate (ou Façade) : Démos avancées

 

Le design pattern delegate ( ou façade ) est un pattern très utilisé et facile à expliquer.

Deux démos, une simple et une seconde très avancée, vous permettent de pratiquer sereinement ce design sans difficulté.

Ainsi, les ingrédients de ce blog sont divisés en deux parties:

  • La première partie, contenant une démo simple, n'exige aucun prérequis (mis à part un peu de java 8).
  • La seconde partie, contenant une démo très avancée, nécessite de connaître un peu spring-batch et en particulier son FlatFileItemReader (retrouvez un article sur le sujet ici).

Date Java8: Exemples de manipulation des dates en java 8

L'un des changements importants en java 8 est l'introduction de nouvelle Api (JSR 310) pour la gestion des dates.

La nouvelle api datetime introduite dans java 8 s'est inspirée de Joda-Time (cette dernière est très utilisée dans les projets).
Ceci dit, l'api java.time de java 8 est différente de Joda sur certains détails.

A ce propos, l'auteur de Joda-Time (Stephen Colebourne) a participé à la réalisation de la  JSR 310.

En effet, la pratique de l'api java.util.Date (donc pour les version java <8) a mis en évidence que son design est assez déroutant, voire peu intuitif, sur certains points:

  • les années des dates démarrent de 1900,
  • les jours commencent à 1, les mois à 0,
  • pas thread safe,
  • sans parler de la gestion du lenient.

La nouvelle api java date & time est donc guidée par ces trois axes:

  • domain driven design (voir site oracle pour plus de précisions),
  • immutabilité renforcée pour garantir thread safe,
  • séparation des calendriers et chronologies.

L'objet de ce blog est de vous donner quelques concepts avancés par des exemples sans rentrer dans la théorie.

Notez donc que ce billet n'est pas structuré comme une introduction à l'api java.time.

Java : comment relancer une méthode plusieurs fois sans écrire du code ?

java8    image_retry

 

L'objet de ce billet est de répondre par la pratique à la question du titre. J'insiste sur un détail qui ne l'est pas: Sans écrire du code.

Plus précisément, je possède une classe java ayant une méthode qui se connecte à un support (réseau, périphérique,..) mais qui pourrait ne pas répondre au premier coup. Je souhaite alors que l'action de la méthode puisse être relancée (retry) un certain nombre de fois à intervalle régulier.