Как проверить на наличие значения в Optional

«Как проверить на наличие значения в Optional» — вопрос из категории Java, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java при написании тестов или продакшн-кода, который обрабатывает потенциально null-значения, я активно использую Optional. Проверка наличия значения делается так:

  • isPresent() / isEmpty() (Java 11+): Классическая проверка.

    Optional<String> userInput = getUserInput();
    
    if (userInput.isPresent()) {
        // Значение есть, можно безопасно работать
        String value = userInput.get();
        System.out.println("Input: " + value);
    }
    
    if (userInput.isEmpty()) {
        // Значение отсутствует
        System.out.println("No input provided.");
    }

Однако, прямое использование isPresent() + get() считается антипаттерном. Вместо этого я предпочитаю функциональные подходы, которые безопаснее и выразительнее:

  • ifPresent(): Выполнить действие, если значение есть.
    userInput.ifPresent(v -> System.out.println("Input: " + v));
  • orElse() / orElseGet(): Получить значение или значение по умолчанию.
    String safeValue = userInput.orElse("default_value");
    String lazyValue = userInput.orElseGet(() -> computeDefault()); // Ленивое вычисление
  • orElseThrow(): Выбросить исключение, если значения нет. Часто используется в сервисном слое.
    String mandatoryValue = userInput.orElseThrow(() -> 
        new IllegalArgumentException("User input is mandatory for this operation")
    );

Такой стиль позволяет избежать проверок на null и делает поток выполнения более декларативным.