【问题标题】:Terminate stream when value matches criteria, otherwise collect into a collection当值匹配条件时终止流,否则收集到集合中
【发布时间】:2021-12-07 20:32:06
【问题描述】:

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

这看起来很简单,但我想将我的流设计为如果通过流的整数匹配某些条件也立即终止。

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

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

【问题讨论】:

  • 到目前为止你尝试了什么?如果您可以提供一些代码,这里的伙计们/姑娘们可以为您提供更好的帮助。顺便说一句,我猜 Java Stream API 的 map、filter 和 collect 方法可以帮助你。您可以查看 Stream API 的官方文档(docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html),也可以在线查看一些示例。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: java stream short-circuiting parallelstream


【解决方案1】:

您正在寻找的是takeWhile 运算符...

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

更多信息在article

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多