Conditionnellement ajouter une opération de Java 8 flux

Je me demande si je peux ajouter une opération à un flux de données, basé sur une sorte de condition fixée à l'extérieur du cours d'eau. Par exemple, je veux ajouter une limite de fonctionnement de la transmission si mon limit variable n'est pas égale à -1.

Mon code ressemble à ça, mais je n'ai pas encore voir d'autres exemples de flux utilisé de cette façon, lorsqu'un objet de Flux de données est réaffecté à la suite d'un intermédiaire en opération appliquée à lui-même:

//Do some stream stuff
stream = stream.filter(e -> e.getTimestamp() < max);

//Limit the stream
if (limit != -1) {
   stream = stream.limit(limit);
}

//Collect stream to list
stream.collect(Collectors.toList());

Comme indiqué dans ce stackoverflow post, le filtre n'est pas appliqué jusqu'à ce qu'un terminal opération est appelée. Depuis que je suis à la réaffectation de la valeur de flux avant d'un terminal de fonctionnement est appelé, est le code ci-dessus encore une bonne façon d'utiliser Java 8 flux?

  • Il semble que vous n'êtes pas capturer la sortie de stream.filter().
  • Si vous voulez l'écrire en une seule ligne, vous pouvez écrire .limit(limit != -1 ? limit : Long.MAX_VALUE) mais je ne le ferais pas.
  • Mon erreur, j'ai oublié d'affecter la valeur de la filtrés flux de stream dans mon premier exemple de code. Je suppose que j'ai compris les flux de manière incorrecte. J'ai lu que tous les cours d'eau devait être suivie par une exploitation du terminal pour être exécuté, alors j'ai pensé qu'il était incorrect de stocker le flux dans le même stream variable. Je vais mettre à jour ma question d'origine.
  • Noter qu'il y a une fonctionnalité intéressante proposition dans OpenJDK: ajout de chain() méthode. Avoir votre problème sera résolu dans une seule expression comme stream.filter(...).chain(s -> limit == -1 ? s : s.limit(limit)).collect(toList()). Actuellement, le statut de cette fonction n'est pas claire: il n'est même pas marqué pour être ajouté dans JDK-9.
InformationsquelleAutor Lani | 2015-11-16