当前位置: 首页 > 知识库问答 >
问题:

终止iterable.foreach早期[duplicate]

敖淮晨
2023-03-14

我有一套和一个方法:

private static Set<String> set = ...;
public static String method(){
    final String returnVal[] = new String[1];
    set.forEach((String str) -> {
        returnVal[0] += str;
        //if something: goto mark
    });
    //mark
    return returnVal[0];
}

我可以终止lambda内部的forEach吗(使用或不使用异常)?我应该使用匿名类吗?

我可以这样做:

set.forEach((String str) -> {
     if(someConditions()){
         returnVal[0] += str;
     }
});
return set.parallelStream().reduce((output, next) -> {
    return someConditions() ? next : output;
}).get(); //should avoid empty set before

我正在寻找最快的解决方案,所以异常和一个'real'为每个循环是可以接受的,如果他们是足够快的。

共有1个答案

谭研
2023-03-14

我不太愿意回答这个问题,尽管我不完全确定您想要完成什么,但简单的回答是否定的,您不能在foreach处理元素的过程进行到一半时终止该foreach

官方的Javadoc声明它是一个终端操作,适用于流中的所有元素。

对此流的每个元素执行一个操作。

一定要考虑它是一个流在做什么。它作用于它所包含的所有元素--如果它在过程中被过滤,那么链中的每一步都可以说作用于它流中的所有元素,即使它是原始链的一个子集。

如果您想知道为什么简单地放置return不会有任何效果,下面是foreach的实现。

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

使用者被显式地传入,这是独立于实际迭代进行的。我想您可以抛出一个异常,但如果可能存在更优雅的解决方案,那就太俗气了。

 类似资料:
  • 我正在训练我的第一个转移学习模式(耶!)当验证损失在超过3个时期内没有变化超过0.1时,我很难让模型停止训练。 下面是相关的代码块 下面是一些日志: 问题: 为什么训练没有在第37纪元停止,因为我设置了早期停止回调来监控Valu损失 我可以做更复杂的提前终止回调吗?类似于“如果值”的东西

  • 我正在使用Spring Cloud Config Server为我的客户端应用程序提供配置。为了方便机密配置,我使用HashiCorp Vault作为后端。对于其余的配置,我使用GIT repo。因此,我在复合模式下配置了配置服务器。请参阅我的配置服务器引导。yml如下:- 这一切都按预期工作。但是,我使用的代币使用Vault auth策略进行保护。见下文:- 我的问题是,我没有在所有这些范围内存

  • 终止容器 可以使用 docker container stop 来终止一个运行中的容器。 此外,当 Docker 容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。 终止状态的容器可以用 docker container ls -a 命令看到。例如 docker container ls

  • 由于限制,我需要在第一次启动时下载一个wav文件。 我将该文件托管在服务器上。 我已经检查过了,我在服务器上有完整的文件,我也验证过了,用管道将audioinputstream输入到一个剪辑中,播放它就会播放完整的音频。 现在我的问题是:如何将完整的流写入一个文件,或者我是否必须这样做,这是一种更简单的方法,可以将wav文件下载到特定的位置

  • Dropwizard版本:1.1.4 jetty-server版本:2.25.1 错误发生在下面一行的代码中:Request.BufferEntity()

  • 它的工作很好,但当我把它封闭在我的如果不喜欢 这给了我一个例外: org.apache.jasper.jasperexception:/jsp/custmngmt/reports/viewCustomerDepositReportCriteriaForOldReceipt.jsp(356,0)未终止 我已经测试了条件,它确实输入了if部分,但在通过form标记时会导致异常。我不明白。请帮帮我。