質問

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.

役に立ちましたか?

解決

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)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top