[JAVA] Vous souhaitez supprimer une IOException de Stream? dans ce cas

^Logo by Utilisez Try ou Either depuis Vavr.

Y a-t-il quelque chose comme ça?

image.png

Un cas où Stream traite une valeur et vous devez gérer une exception vérifiée dans une expression lambda au milieu.

Remarque: veuillez penser qu'il est difficile de changer le BookReader car il est externe.

Adaptation commune

image.png

Cas où l'erreur d'exécution est remplacée par RuntimeError. Si vous gérez correctement les erreurs dans une méthode ou dans une plage privée, il est difficile de lancer des exceptions dans le monde public. De plus, je crains que même si je ne le fais pas maintenant, je puisse le faire avec désinvolture.

Vous devez utiliser Stream de force

image.png

Droite. Je pense que c'est mieux que de lancer une RuntimeError. Le nombre de variables locales est passé de 0 à 2, la quantité de codage a plus que doublé et l'imbrication est de 2 niveaux plus profonde, mais si toute l'équipe en est satisfaite, ce serait bien. ..

Sujet principal

Par exemple, Golang utilise des tapples (un ensemble de plusieurs instances) pour propager des résultats anormaux à l'appelant, mais Java ne prend pas en charge les tuples au niveau de la spécification du langage. Vous pouvez le remplacer en créant une classe, mais pour la programmation fonctionnelle, Scala et Haskell ont de meilleures idées.

Vavr est une bibliothèque qui facilite la programmation fonctionnelle en Java.

Either

Une classe qui prend une valeur «Droite» ou «Gauche». Il est habituel de régler «Droite» pour le système normal et «Gauche» pour le système anormal. (calembour)

Je pense que ce serait bien si vous pouviez avoir une version améliorée de ʻOptional. Avec ʻOptional, seules les informations indiquant s'il est ou non null peuvent être envoyées en aval du Stream, mais avec ʻEither`, des valeurs telles que des exceptions peuvent être envoyées.

Try

C'est une classe pour écrire try-catch en tant que type de fonction tel quel. Vous pouvez recevoir une expression lambda qui peut lever une exception vérifiée et exprimer ce qui se passe lorsqu'une exception se produit sous la forme d'un lambda.

Considérez cela comme une version améliorée de ʻOptional qui contient des valeurs normales ou anormales, tout comme ʻEither.

En regardant seulement l'atmosphère, il semble que Try soit une option, mais dans Try, l'entrée d'un traitement anormal devient Throwable et le downcast a tendance à se produire, donc il y a des cas où écrire avec ʻEither` ne fait pas de mal.

j'écrirai

Par exemple, je pense que cela ressemblera à ceci.

Either: image.png

Try: image.png

Notez que Try est jette Throwable. Si vous voulez le gérer correctement, vous devrez abattre.

Au fait

Une fois que vous commencez à utiliser Vavr dur, il ne ressemblera plus à Java et sera difficile à maintenir, et vous commencerez à vous demander pourquoi vous n'utilisez pas Scala ou Haskell, il est donc recommandé de l'utiliser comme une pincée.

Autres solutions

Vous n'êtes pas obligé de continuer à utiliser Java de force? Peut être conseillé au patron.

Sentiments divers

Je me demande s'il s'agit d'OSS ...

Recommended Posts

Vous souhaitez supprimer une IOException de Stream? dans ce cas
Créer une ArrayList qui vous permet de lancer et de récupérer les coordonnées d'un plan bidimensionnel
Je souhaite envoyer un e-mail en Java.
Je veux arrêter les cas de serpent avec des définitions de table
Je veux écrire une boucle qui fait référence à un index avec l'API Stream de Java 8
Convertir un tableau potentiellement nul en flux
Générer un flux à partir d'un tableau de types primitifs en Java
L'histoire de Collectors.groupingBy que je veux garder pour la postérité
Résumé des problèmes auxquels je n'ai pas pu me connecter à Firebase
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Comment obtenir la longueur d'un fichier audio avec Java
[Rails] Je souhaite envoyer des données de différents modèles dans un formulaire
Comment convertir un tableau de chaînes en un tableau d'objets avec l'API Stream
Mon mémorandum que je veux faire ValidationMessages.properties UTF8 dans Spring Boot
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
Je veux ForEach un tableau avec une expression Lambda en Java