空检查CompletableFuture对象数组

时间:2018-12-12 00:49:48

标签: java java-8 completable-future

我将CompletableFuture用于以下一项服务-

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

内部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
}

在这里做任何错误或CompletableFuture数组需要进行任何特殊检查。

1 个答案:

答案 0 :(得分:2)

好吧,CompletableFuture.allOf(employeeDetails)抛出

  

NullPointerException如果数组或其任何元素为空

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

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

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

这样,您的if语句就足够了。