Optional... avec quelques features en plus !
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:
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:
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:
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:
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:
mvn clean install package
Une fois fait, ajoutez le projet dans votre pom.xml:
Code:
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 ?