@MaxLich
java developer с небольшим опытом

Есть ли в стандартной поставки Java 8-* тернарный оператор (условие? результат_true: результат_false) с лямбдами?

Здравствуйте. Было бы удобно, если бы в Java (интересует прежде всего 8-ая версия) была бы функциональная замена тернарного оператор "условие ? результат_true : результат_false".
Я могу и сам это написать, но зачем это делать, если это, возможно уже есть. Может кто-то находил в стандартной поставки такие методы.

ЗЫ Что-то вроде такого:
class TernaryOperator<T> {
   public static T run(boolean condition, Getter<T> resultIfTrue, Getter<T> resultIfFalse) {
       return condition ? resultIfTrue.get() : resultIfFalse.get();
   }
}

interface Getter<T> {
   T get();
}

Использование.
Исходный код:
if (!requestTypeEntity.isPresent()) {
            logger.error("There is no request type with id = " + reqTypeId);
            return EMPTY_VALUE;
        }

        return requestTypeEntity.map(RefRequestTypeEntity::getTypeName).orElse(EMPTY_VALUE);

Можно заменить на что-то такое:
return TernaryOperator.run(!requestTypeEntity.isPresent(), 
() -> {
            logger.error("There is no request type with id = " + reqTypeId);
            return EMPTY_VALUE;
}, () -> {
           requestTypeEntity.map(RefRequestTypeEntity::getTypeName).orElse(EMPTY_VALUE);
})
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
В девятке есть Optional.ifPresentOrElse() и Optional.or(). В восьмёрке придётся изворачиваться:
1. Использовать Optional.orElseGet()
2. Использовать что-нибудь вроде
requestTypeEntity.<Supplier>map(value -> () -> value)
                 .orElse(() -> {
                     logger.error("There is no request type with id = " + reqTypeId);
                     return EMPTY_VALUE;
                 })
                 .get();

Либо колхозить свой функциональный интерфейс. Хотя, само желание что-то подобное сообразить выглядит как костыли для натягивания императивного стиля на функциональный.
Ответ написан
jamakasi666
@jamakasi666
Просто IT'шник.
Есть штатно
условие ? результат_true : результат_ложь
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы