我将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数组需要进行任何特殊检查。
答案 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
语句就足够了。