CompletableFuture 对象数组的 Null 检查

ppb*_*ppb 5 java java-8 completable-future

我正在将 CompletableFuture 用于我的一项服务,如下 -

CompletableFuture<Employee>[] employeeDetails =
        empIds.stream().map(empId ->
            employeeService.employeeDetails(Integer.valueOf(empId))).toArray(CompletableFuture[]::new);
Run Code Online (Sandbox Code Playgroud)

EmployeeService 内部调用返回员工详细信息的 API。

问题是,当该 API 返回 null 或任何异常时,响应将为 null。当我检查 null 时,即使employeeDetails 数组为 null 并且其值也为 null 并且我得到 Null 指针,它也始终为 false。

我正在检查 null 作为 -

if(employeeDetails != null && employeeDetails.length > 0){
   //This condition always true even if null values or null array.
   CompletableFuture<Void> allEmployeeDetails = CompletableFuture.allOf(employeeDetails); // Here I am getting NullPointerException
}
Run Code Online (Sandbox Code Playgroud)

我在这里犯了任何错误,或者 CompletableFuture 数组需要处理任何特殊检查。

Era*_*ran 6

好吧,CompletableFuture.allOf(employeeDetails)抛出

如果数组或其任何元素为 null,则出现 NullPointerException

您必须检查数组的所有元素,并且仅将非空元素传递给allOf.

null或者您可以在创建数组之前过滤掉s:

CompletableFuture<Employee>[] employeeDetails =
    empIds.stream()
          .map(empId -> employeeService.employeeDetails(Integer.valueOf(empId)))
          .filter(Objects::nonNull)
          .toArray(CompletableFuture[]::new);
Run Code Online (Sandbox Code Playgroud)

这样你的if陈述就足够了。