Как получить значение из необязательного объекта в другом необязательном?

По сути, мне нужно получить размер необязательного списка в необязательном объекте. Что-то вроде:

private int getCount(@NonNull Optional<myObject> aaa) {
    if (aaa.isPresent() && aaa.get().getMyList().isPresent()) {
        return aaa.get().getMyList().get().size();
    }

    return 0;
}

Код не выглядит красиво. Какой элегантный способ получить это? С ifPresent(). orElse()? Заранее спасибо!

"элегантный способ" -> вероятно, нет - это своего рода странный с параметром Optional в качестве (и, возможно, с таким же атрибутом)
user16320675 21.03.2022 21:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Последовательные map (или flatMap, если что-то возвращает Optional) операции и финальная orElse:

private int getCount(@NonNull Optional<myObject> cvm) {
    return cvm
      .flatMap(x -> x.getMyList())
      .map(list -> list.size()) // or List::size
      .orElse(0);
}

Другие вопросы по теме