Bonjour,

Je vous propose un nouvel élément à utiliser : Optional... avec quelques features en plus !

Fonctionnalités ajoutées:



- La méthode mapOr()qui permet d'exécuter une méthode sur la valeur contenue ou de renvoyer une valeur par défaut si le conteneur est vide;

- La méthode mapOrElse() qui permet d'exécuter une méthode sur la valeur contenue ou exécuter une méthode par défaut dans le cas où le conteneur serait vide;

- La méthode getOrInsert() qui permet de récupérer la ressource d'un conteneur ou d'en insérer une s'il était vide tout en récupérant une référence de cette dernière;

Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 ReferenceHandler <Option<String>> noneOption = new ReferenceHandler<>(new None<>());
 
 final String foo = noneOption.get().getOrInsert(noneOption, "foo");
 
 assertThat(foo, is(equalTo("foo")));
 
 assertThat(noneOption.get().getClass(), is(equalTo(Some.class)));

- La méthode getOrInsertWith() qui permet de récupérer la ressource d'un conteneur ou d'en insérer une par le biais d'une méthode tout en récupérant une référence de cette nouvelle ressource;

Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
final ReferenceHandler<Option<String>> noneOption = new ReferenceHandler<>(new None<>());
 
final String foo = noneOption.get().getOrInsertWith(noneOption, () -> "foo");
 
assertThat(foo, is(equalTo("foo")));
 
assertThat(noneOption.get().getClass(), is(equalTo(Some.class)));

- La méthode take() qui permet littéralement de prendre la valeur d'un conteneur et la placer dans un autre, réinitialisant le premier conteneur à None.

Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Option<Integer> integer = new Some<>(117);
 
final ReferenceHandler<Option<Integer>> ref = new ReferenceHandler<>(integer);
 
final Option<Integer> anotherInteger = integer.take(ref);
 
 
assertThat(ref.get(), is(equalTo(new None<Integer>())));
 
assertThat(anotherInteger, is(equalTo(new Some<>(117))));

Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
final Option<Integer>integer = new None<>();
 
final ReferenceHandler<Option<Integer>> ref = new ReferenceHandler<>(integer);
 
assertThat(integer.take(ref), is(equalTo(new None<>())));
 
assertThat(ref.get(), is(equalTo(new None<>())));



Utilisation


Il vous faudra utiliser maven 3 pour compiler et construire un jar puis exécuter simplement la commande:
Code Bash : Sélectionner tout - Visualiser dans une fenêtre à part
mvn clean install package

Une fois fait, ajoutez le projet dans votre pom.xml:

Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <!-- ... -->
  <dependencies>
    <dependency>
      <groupId>fr.songbird.rapi</groupId>
      <artifactId>RAPI</artifactId>
      <version>0.1.0-SNAPSHOT</version>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</project>


C'est prêt !


Note: C'est une snapshot mais les outils se trouvant dedans sont totalement stables (l'utilisant moi-même). Si vous avez des suggestions à propos du code (modifications, tricks, ...) n'hésitez pas à me le notifier ici ou vous pouvez également ouvrir une PR par ici.

Note (1): Result n'est pas terminée et ne concerne pas cette contribution.

Qu'en pensez-vous ?