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 数组需要处理任何特殊检查。
好吧,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陈述就足够了。