Преобразовать эту нулевую проверку в Java 8 Необязательно - PullRequest
0 голосов
/ 21 октября 2018

Я не могу понять, как удалить указанную ниже нулевую проверку с помощью Java 8 Optional

for (A objA : listOfObjectsA) {
    if (objA.getStringField() == null) continue;
        // some code to do if not null
}

Ответы [ 4 ]

0 голосов
/ 21 октября 2018

если «какой-то код, если не ноль» работает только на objA.getStringField(), то вы можете сделать:

listOfObjectsA.stream()
              .map(A::getStringField)
              .filter(Objects::nonNull)
              .forEach(e -> ...);

Однако, если вы все еще хотите иметь доступ к элементам A, то какдругие ответы показали, что у вас нет выбора, кроме как выполнить явное objA.getStringField() != null:

listOfObjectsA.stream()
              .filter(a -> a.getStringField() != null)
              .forEach(a -> ...);
0 голосов
/ 21 октября 2018

В идеале без дополнительных, вы можете сделать

listOfObjectsA.stream().filter(objA -> objA.getStringField() != null)
                       .forEach(objA -> { /* some code to do if not null*/ });
0 голосов
/ 21 октября 2018

Вы можете заменить свой код в стиле Java8 с потоками и Optional.Но я думаю, что в данном конкретном случае это не лучше, чем POJO (что гораздо проще и удобочитаемее):

Optional.ofNullable(listOfObjectsA).orElse(Collections.emptyList()).stream()
        .filter(Objects::nonNull)
        .filter(objA -> Objects.nonNull(objA.getStringField()))
        .forEach(objA -> {
            // some code to do if not null
        });

Если вы уверены, что данный список не может быть null икаждый элемент objA также не может быть null, тогда вы определенно можете избежать некоторых бесполезных проверок в этом случае:

listOfObjectsA.stream()
        .filter(objA -> Objects.nonNull(objA.getStringField()))
        .forEach(objA -> {
            // some code to do if not null
        });
0 голосов
/ 21 октября 2018

Вам не нужно использовать Optional s для этого.Вы можете фильтровать элементы null, используя Stream:

listOfObjectsA.stream()
              .filter(objA -> objA.getStringField() != null)
              .forEach (... do something  ...);

. Для использования Optional вы можете написать Optional.ofNullable(objA.getStringField()).isPresent(), но это кажется бессмысленным.

...