Java - Как заменить старый блок нулевой проверки кода на необязательную нулевую проверку? - PullRequest
0 голосов
/ 07 мая 2020

Попытка рефакторинга всего моего проекта.

Я хочу, чтобы этот блок был проще с дополнительными Java 8 нулевыми проверками, если возможно, чтобы в конце были те же результаты? Спасибо

List<EntityDto> ventolinLogs = new ArrayList<>();
 for (VentolinLog logs : ventolinLogsList) {
   for (String ventolinId : logs.getVentolinIds()) {

   Ventolin ventolin = persistence.get(Ventolin.class, ventolinId);
   String ventolinName= "";
   String ventolinFirstName= "";

   if (ventolin != null) {
     ventolinName= ventolin.getVentolinName();
     ventolinFirstName= ventolin.getFirstName();
   }

   VentolinProfile ventolinProfile = persistence.get(VentolinProfile.class, ventolinId);
   String ventolinProfileName= "";

   if (ventolinProfile != null) {
     ventolinProfileName= ventolinProfile.getName();
   }

   EntityDto LogDto = EntityDto.builder()
            .ventolinId(ventolinId)
            .ventolinName(ventolinName)
            .ventolinFirstName(ventolinFirstName)
            .ventolin

      ventolinLogs.add(LogDto);
   }
}

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

В случае, если вы можете вернуть необязательный параметр из класса Persistence или, как в примере, просто создать необязательный параметр, вы можете сделать следующее:

ventolinProfileName = Optional.ofNullable(ventolinProfile).map(VentolinProfile::getName).orElse(ventolinProfileName); // or just "" in the last brackets

Я бы также извлек конструктор в переменную и передать его лямбда:

EntityDtoBuilder builder = EntityDto.builder();
Optional.ofNullable(ventolin).ifPresent(vp-> builder.ventolinName(vp.getVentolinName())
.ventolinFirstName(vp.getFirstName()))

Но вы должны позаботиться о значениях по умолчанию, которые инициализируются как пустые строки в вашем коде

0 голосов
/ 07 мая 2020

Сделать persistence.get return необязательным. Вы можете использовать return Optional.ofNullable(result) для этого в своем классе Persistence.

Теперь в вашем коде можно использовать:

Optional<VentolinProfile> ventolinProfile = persistence.get(VentolinProfile.class, ventolinId);
String ventolinProfileName = ventolinProfile.map(VentolinProfile::getName).orElse("");

Для получения дополнительной информации ознакомьтесь с некоторыми руководствами по дополнительным параметрам, например здесь : https://www.baeldung.com/java-optional

Но, как видите, это не сильно укорачивает код.

...