| Using `Optional#map` (or `Optional#transform`) to map to another `Optional` | |
| might indicate an error, or at least quite hard-to-reason-about code that may | |
| turn into an error. | |
| For example, | |
| ```java | |
| class AccountManager { | |
| /** Retrieves the current user, or absent if not logged in. */ | |
| Optional<Account> getUser() { | |
| ... | |
| } | |
| /** | |
| * Returns an administrative token for the user, or absent if they do not have | |
| * such privileges. | |
| */ | |
| Optional<Token> getAdminToken() { | |
| } | |
| void doScaryAdminThings() { | |
| if (getUser().map(AccountManager::getAdminToken).isPresent()) { | |
| // do privileged things. | |
| } | |
| } | |
| } | |
| ``` | |
| In this case, assuming `getAdminToken` does not throw, the conditional is | |
| equivalent to `getUser().isPresent()`, which is not what was intended. | |
| `getUser().flatMap(AccountManager::getAdminToken).isPresent()` would be correct. |