Несколько форм:
long lastPollTime = Optional.ofNullable(object).map(o -> o.getTime()).orElse(0L);
long lastPollTime = Optional.ofNullable(object).map(YouObjectClass::getTime).orElse(0L);
long lastPollTime = Optional.ofNullable(object).isPresent() ? object.getTime() : 0;
long lastPollTime = object != null ? object.getTime() : 0;
Из них последний, который не использует Факультативно (! И поэтому строго не ответ на ваш вопрос) проще читать и имеет меньше времени выполнения накладных расходов, и поэтому должно быть предпочтительным.
Возможно, это даже проще, если вы полностью изменить параметры:
long lastPollTime = object == null ? 0 : object.getTime();
... хотя вы можете предпочесть иметь по умолчанию в прошлом - это вопрос личного вкуса.
Если вы действительно не можете использовать тройные операторы, и вы делаете это много, вы можете написать свой собственный метод полезности:
public <T,U> U mapWithFallback(T obj, Function<T,U> function, U fallback) {
if(obj == null) {
return fallback;
} else {
return function.apply(obj);
}
}
... вызываемым как:
long lastPollTime = mapWithFallback(object, o -> o.getTime(), 0);
... или сделать полное издевательство ваших не-триад проверки с помощью:
public <T,U> U ifElse(Supplier<Boolean> a, Supplier<U> ifTrue, Supplier<U> ifFalse) {
if(a.get()) {
return ifTrue.get();
} else {
return ifFalse.get();
}
}
long lastPollTime = ifElse(() -> object == null,() -> object.getTime(),() -> 0);
Это в еще лучшего вкуса, чтобы избежать пустых ссылок в целом, так что этот вид проверки не требуется - например, с помощью Null Object pattern.
Вызов '.mapToLong' на ваш' Факультативный', а затем 'orElse' – Ferrybig
Перефразировать Джейми Завински:« Некоторые люди, столкнувшись с проблемой, думают «Я знаю, я буду использовать <новую функцию языка>»; теперь у них есть две проблемы ». Использование чего-либо большего, чем условный оператор, чтобы сделать это в однострочном пространстве, просто делает ненужную работу. –
Я бы согласился с Энди, если вам нужно сначала построить опцию, это действительно ничего не поможет. Если у вас есть/сохраните опцию по другим причинам, карта/orElse хороша. – eckes