У меня две строки Optional
, name1
и name2
. Я хочу присоединиться к двум таким образом, чтобы результат также был необязательным:
- Если один из них не является пустым, результатом должно быть непустое имя.
- Если оба значения не являются пустыми, я хочу, чтобы результат был связан с разделителем
AND
. - Если оба пустые, результат должен быть пустым
Optional
Моя попытка:
StringBuilder sb = new StringBuilder();
name1.ifPresent(sb::append);
name2.ifPresent(s -> {
if (sb.length() > 0) {
sb.append(" AND ");
}
sb.append(s);
}
Optional<String> joinedOpt = Optional.ofNullable(Strings.emptyToNull(sb.toString()));
Это работает, но кажется уродливым и не очень функциональным.
PS: Существует аналогичный вопрос, но принятый ответ неверен. В частности, если name1
пуст, а name2
- нет, он возвращает пустой необязательный.