gpt4 book ai didi

java - executor.invokeAll() lambda 体不返回

转载 作者:行者123 更新时间:2023-12-02 04:04:37 25 4
gpt4 key购买 nike

这个想法是针对某种编译器的,我正在尝试实现一个启动另一个线程的 fork 语句。代码:

List < Callable < CustomClass >> callList = lista.stream().map(p -> (Callable < CustomClass > )() -> p.oneStep()).collect(Collectors.toList()); //here I just prepared the list of callables
List < CustomClass > newPrgs;
try {
newPrgs = executor.invokeAll(callList).stream().map(future -> {
try {
return future.get();
} catch (Exception e) {
e.printStackTrace();
}
}
/here it indicates the error/.filter(p -> p != null).collect(Collectors.toList());
} catch (InterruptedException e) {
throw new CustomException(e.getMessage());
}

错误是:lambda 主体既不兼容值也不兼容 void。我尝试了各种改变和技巧,但没有结果。请帮忙吗?

最佳答案

问题出在 lambda 的定义中......

{
try{
return future.get();
}
catch (Exception e){
e.printStackTrace();
}
}

现在,这对于快乐路径来说很好,它只返回来自 future 的响应,但如果发生异常,这个 lambda 将不会返回值。您需要从异常情况中返回一些内容,或者抛出 RuntimeException。做什么取决于您的用例 - 异常将停止整个流的处理,但 null 或默认值可能会带来污染您的流的风险。

此外,通常最好不要捕获异常 - 将捕获量减少到您可以处理的必要/最小集合。

抛出异常的形式看起来像......

{
try{
return future.get();
}
catch (InterruptedException | ExecutionException e){
e.printStackTrace();
throw new RuntimeException(e)
}
}

关于java - executor.invokeAll() lambda 体不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34483162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com