Нулевая проверка для массива объектов CompletableFuture - PullRequest
0 голосов
/ 12 декабря 2018

Я использую CompletableFuture для одного из моих сервисов, как показано ниже -

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

Внутренний API-интерфейс EmployeeService, который возвращает сведения о сотруднике.

Проблема заключается в том, что этот API возвращает ноль или любое исключение, а затемответ нулевойКогда я проверяю на нулевое значение всегда, оно ложно, даже если массив employeeDetails равен нулю, а его значения также равны нулю, и я получаю нулевой указатель.

Я проверяю нулевое значение как -

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 голосов
/ 12 декабря 2018

Ну, CompletableFuture.allOf(employeeDetails) выдает

NullPointerException, если массив или любой из его элементов имеют значение null

Вы должны проверить все элементы массива и толькопередайте ненулевые единицы в allOf.

Или вы можете отфильтровать null s перед созданием массива:

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

Таким образом, ваш оператор if долженбыть достаточным.

...