Проверка наличия какого-либо элемента потока - PullRequest
0 голосов
/ 19 марта 2020

У меня есть поток опций. Я хотел бы вернуть true, если какой-либо из элементов потока отсутствует, и false, если все элементы присутствуют.

Код:

return Stream.of(a.getBestArrivalTime(),
        a.getBestDepartureTime(),
        a.getScheduledArrivalTime(),
        a.getScheduledDepartureTime())
        .anyMatch(Objects::isNull);

Проверяет, являются ли элементы нулевыми, но это неправильно, потому что он не работает с необязательными переменными. Я думаю, что мне нужно использовать Optional::isPresent, но я не смог его использовать, потому что Stream.of() - это метод stati c. Поля в потоке - это просто выбранные поля из объекта.

Ответы [ 2 ]

3 голосов
/ 19 марта 2020

Вы можете написать код, как вы ожидаете, например:

return Stream.of(a.getBestArrivalTime(), a.getBestDepartureTime(),
                 a.getScheduledArrivalTime(), a.getScheduledDepartureTime())
             .anyMatch(o -> !o.isPresent());//(Java-11) anyMatch(Optional::isEmpty)
2 голосов
/ 19 марта 2020

Что не так с

return !Stream.of(a.getBestArrivalTime(),
    a.getBestDepartureTime(),
    a.getScheduledArrivalTime(),
    a.getScheduledDepartureTime())
    .allMatch(Optional::isPresent);

?

Редактировать: Доказательство моего комментария о вашем неверном предположении о "не-stati c методе нельзя ссылаться из контекста stati c . ":

import java.util.Optional;
import java.util.stream.Stream;

public class Application {

    public static void main (String[] args) {
        final boolean allMatch = !Stream.of(Optional.empty(), Optional.empty())
            .allMatch(Optional::isPresent);
        System.out.println(allMatch);
    }
}
...