43 votes

Qu'est-ce qu'une "opération escape-hatch" dans un flux Java?

J'ai été lire le Java docs et rencontré cette phrase:

Sauf pour l'évasion de l'éclosion des opérations iterator() et spliterator(), l'exécution commence lorsque le terminal de l'opération est invoquée, et se termine lorsque le terminal opération est terminée.

Je ne suis pas sûr de ce que "échapper à l'éclosion des opérations" signifie. Quelqu'un pourrait-il m'expliquer ce terme?

42voto

DVarga Points 14186

À partir de la javadoc de l' stream paquet de:

Dans presque tous les cas, les opérations de terminal sont désireux, à remplir leurs la traversée de la source de données et le traitement de la canalisation avant retour. Seules les opérations de terminal iterator() et spliterator() sont pas; elles sont fournies comme un "sas de secours" afin de permettre à l'arbitraire contrôlée par le client pipeline traversals dans le cas où l'existant les opérations ne suffisent pas à la tâche.

Ce qui signifie que dans la plupart des cas, le flux de la traversée à l'est terminée quand un terminal opération retourne, mais pas dans le cas d' iterator() et spliterator(): en utilisant l'une de ces opérations de terminal un Iterator ou Spliterator est retourné, mais le pipeline est toujours "ouvert" et il sera traité comme les éléments sont demandés par l'itérateur. De cette façon, le traitement de flux devient paresseux, parce que les opérations sur le stream n'est effectuée que si l'élément suivant est demandé.

Iterator<Person> iterator = persons
    .stream()
    .filter(p -> !p.getName().equals("Mike Tyson"))
    .iterator();

Après l' iterator() méthode est appelée, le flux est "terminé": vous ne pouvez pas la chaîne de plusieurs méthodes. Mais vous pouvez accéder aux éléments du cours d'eau par l'appel de la next() méthode de l'itérateur renvoyé et le cours d'eau va commencer à être traitées uniquement la première fois que vous le faites. Et c'est vrai que si l' iterator() ouspliterator() d'exploitation du terminal est utilisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X