当值匹配条件时终止流,否则收集到集合中

Terminate stream when value matches criteria, otherwise collect into a collection

我正在为国际象棋引擎使用 Java 并行流。该流用于评估给定移动列表中的每个国际象棋移动。每个移动都映射到一个表示移动值的整数,然后我将所有整数收集到一个列表中,return 列表中最大的整数。

这看起来很简单,但我想将我的流设计为在通过流的整数符合特定条件时也立即终止。

例如,如果我有一个包含 100 个 Move 的列表要转换成一个流,如果这些 Move 中的任何一个映射到小于 4 的整数,我希望我的流立即终止,否则我想将这些整数收集到一个列表中(这只是一个帮助澄清的示例)。

我不确定该怎么做(我考虑过短路操作,但我不知道如何在流不存在的情况下将短路操作与收集器结合使用短路)。我也很乐意澄清任何事情。谢谢!

您要查找的是 takeWhile 运算符 ...

Stream.of("cat", "dog", "elephant", "fox", "rabbit", "duck")
  .takeWhile(n -> n.length() % 2 != 0)
  .forEach(System.out::println);

更多信息在此 article