Agrégée d'exécution des exceptions en Java 8 flux

Disons que j'ai une méthode qui renvoie une exception d'exécution. Je suis à l'aide d'un Stream d'appeler cette méthode sur des éléments dans une liste.

class ABC {

    public void doStuff(MyObject myObj) {
        if (...) {
            throw new IllegalStateException("Fire! Fear! Foes! Awake!");
        }
        //do stuff...
    }

    public void doStuffOnList(List<MyObject> myObjs) {
        try {
            myObjs.stream().forEach(ABC:doStuff);
        } catch(AggregateRuntimeException??? are) {
            ...
        }             
    }
}

Maintenant, je veux tous les éléments de la liste à traiter, et aucune des exceptions d'exécution sur des éléments individuels pour être rassemblées dans un "agrégat" runtime exception qui sera lancé à la fin.

Dans mon code, je fais de la 3e partie des appels d'API qui peut lancer des exceptions d'exécution. Je veux faire en sorte que tous les éléments sont traités et toutes les erreurs signalées à la fin.

Je ne peux penser à quelques façons de pirater ce, comme une map() fonction qui récupère et retourne l'exception (..frisson..). Mais est-il originaire façon de le faire? Si non, est-il une autre façon de mettre en œuvre proprement?

  • Cela se sent comme un abus du mécanisme d'exception. Quel est votre réel de cas d'utilisation ici? La validation d'un ensemble d'opérations et de rendre compte de ce qui a échoué?
  • pas tout à fait. Je fais de la 3e partie des appels d'API qui peut lancer des exceptions d'exécution. Tout ce que je veux faire est de vous assurer que tous les éléments sont traités et toutes les erreurs signalées à la fin.
  • Avez-vous vraiment besoin d'utiliser les flux? C'est trivial sans elle.
  • Je sais, droit? Mais je m'attendais à utiliser parallelStream finalement.
  • Mon stream-fu n'est pas trop fort pour vous donner une belle réponse, mais basé sur cette discussion sur les cours d'eau et les exceptions un flux en fonction de la solution est au moins un peu douteuses.
InformationsquelleAutor metacubed | 2015-05-08