Maison  >  Article  >  Java  >  Comment filtrer en toute sécurité les flux d'objets qui génèrent des exceptions dans Java 8 ?

Comment filtrer en toute sécurité les flux d'objets qui génèrent des exceptions dans Java 8 ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-25 21:38:03709parcourir

How Can You Safely Filter Streams of Objects That Throw Exceptions in Java 8?

Expressions Lambda et flux exceptionnels dans Java 8 : filtrer les méthodes en toute sécurité

Les expressions Lambda ont révolutionné le codage Java, permettant des techniques de programmation fonctionnelle concises et expressives . Cependant, lorsqu'il s'agit de méthodes capables de lever des exceptions, comme dans l'exemple fourni, les opérations de flux Java 8 peuvent rencontrer des problèmes de compilation.

Le problème

L'extrait de code tente pour filtrer un flux d'objets Account en fonction de leur méthode isActive(), qui lève une IOException. L'opération de filtrage ne parvient pas à se compiler car Java nécessite que les exceptions vérifiées soient gérées explicitement dans le flux.

La solution

Pour résoudre ce problème, il faut gérer l'exception potentielle avant qu'il n'échappe à l'expression lambda. Ceci peut être réalisé en encapsulant l'appel de la méthode isActive() dans un bloc try-catch à l'intérieur du lambda :

<code class="java">s = s.filter(a -> {
    try {
        return a.isActive();
    } catch (IOException e) {
        throw new UncheckedIOException(e);
    }
});</code>

En convertissant l'exception IOException vérifiée en une exception UncheckedIOException, l'exception peut se propager en toute sécurité dans le flux sans provoquer erreurs de compilation.

Méthodes alternatives

Alternativement, la méthode uncheckCall() peut être utilisée pour gérer les exceptions vérifiées sans compter sur des conversions intermédiaires :

<code class="java">return s.filter(a -> uncheckCall(a::isActive))
        .map(Account::getNumber)
        .collect(toSet());</code>

Cette approche fournit un moyen pratique de gérer les exceptions vérifiées tout en conservant la concision des expressions lambda.

Attention

Il est crucial de considérer l'impact potentiel de la conversion des expressions cochées. exceptions en exceptions non contrôlées. Bien que cela simplifie la gestion des exceptions dans les opérations de flux, cela supprime également l'indication directe de l'exception potentielle de la signature de la méthode. Il faut soigneusement réfléchir à ce que la gestion des exceptions de cette manière corresponde au comportement souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn