java - 验证 completablefutures 列表的大小

标签 java testing java-8 mockito completable-future

我有一个看起来类似于

的代码
public void myMethod(){
    List<CompletableFuture<Void>> futures = new ArrayList<>();                

    //getQuestion, getAnswer, both returns a CompletableFuture<Void>
    futures.add(getQuestion());                
    futures.add(getAnswer());

    // make sure all the futures are executed.
    CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();

}
  • 关于如何在执行 myMethod()*
  • 后测试 futures 数组的大小是否为 2 的任何指示

最佳答案

测试数组的大小没有意义。在 Java 中,数组永远不会改变它们的大小,这也适用于 futures.toArray(…) 返回的数组。如果数组的大小错误,则意味着特定集合的 toArray 实现已经返回了错误大小的数组。

您可以使用 futures.toArray(new CompletableFuture[0])) 让代码更健壮,让 toArray 实现创建一个大小合适的数组传递一个预先确定的数组。如 this article 中所述,它实际上更快,这与古老的神话相反。

当然,对于固定数量的 futures,根本不需要在 collection 和 array 之间进行转换。你可以使用

public void myMethod() {
    CompletableFuture<?>[] futures = { getQuestion(), getAnswer() };

    // make sure all the futures are executed.
    CompletableFuture.allOf(futures).join();
}

CompletableFuture.allOf 的合约是返回一个 future ,当所有 future 都完成时,该 future 将完成,join() 将无条件等待该完成。没有什么需要检查的。如果任何 future 异常完成,join() 方法将抛出一个异常,要么是一个以原始异常为原因的 CompletionException,要么是一个 CancellationException 当异常完成是由取消引起的。

关于java - 验证 completablefutures 列表的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57665861/

相关文章:

java 8 stream finde MIN/MAX 限制

java - 哪个更好 ?许多自定义异常类,还是一个异常类包含许多自定义异常代码?

java - Android 无法在图库中显示 SD 卡照片

java - 最佳选择 - Spring XML 解析以读取某些元素

python - 优化 Django 测试的 fixture 加载部分的最佳方法是什么?

java - Spring MVC 测试框架因 HTTP 响应 406 而失败

Java 8代码阅读

java - 从 lambda 表达式返回值?

java - while 循环不向每个循环新创建的对象添加数据?在 java

javascript - Babel/Karma/Chai 给出 TypeError : 'caller' , 'callee' 和 'arguments' properties may not be accessed on strict mode functions