@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);
})
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 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 : результат_ложь
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
CORE Москва
от 100 000 до 150 000 руб.
Innopolis City Москва
от 80 000 до 170 000 руб.
от 60 000 до 140 000 руб.
22 марта 2019, в 01:06
4000 руб./за проект
22 марта 2019, в 00:24
10000 руб./за проект