@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);
})
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
В девятке есть 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 Куратор тега Java
Просто IT'шник.
Есть штатно
условие ? результат_true : результат_ложь
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Aplaut Москва
от 150 000 до 190 000 руб.
King Bird Studio Москва
До 180 000 руб.
Unitarius Москва
от 130 000 до 180 000 руб.
19 сент. 2019, в 02:43
500 руб./за проект
19 сент. 2019, в 02:30
2000 руб./за проект
18 сент. 2019, в 23:10
5000 руб./за проект