Pregunta

Is there a way to make the following code sample more concise?

final FluentIterable<AuthContext> withEmails = // ...               
final Optional<AuthContext> verified = withEmails.firstMatch(VERIFIED_EMAIL);

if (verified.isPresent()) {
    return verified.get();
}

return withEmails.first().orNull();

I was trying to do something like return verified.or(withEmails.first()) but there is no appropriate method in Optional.

Alternatively return verified.or(withEmails.first().orNull()) will fail when the orNull() method returns null.

¿Fue útil?

Solución

Just do verified.or(withEmails.first()).orNull();.

Depending on the return type of your method and your IDE of choice, the type inference may not suggest this as it returns another Optional of type T rather an a T itself.

c.f. Optional#or(Optional)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top