Optional for Null Safety

Demonstrates using Optional to handle potentially absent values safely, with map, flatMap, filter, orElse, and ifPresent operations to avoid NullPointerExcep...

JavaResilience

Code

snippet
import java.util.Optional;
import java.util.List;

public class OptionalHandling {

    record User(String name, String email) {}

    static Optional<User> findUser(List<User> users, String name) {
        return users.stream()
            .filter(u -> u.name().equals(name))
            .findFirst();
    }

    public static void main(String[] args) {
        List<User> users = List.of(
            new User("Alice", "[email protected]"),
            new User("Bob", "[email protected]")
        );

        String email = findUser(users, "Alice")
            .map(User::email)
            .orElse("not found");
        System.out.println("Alice's email: " + email);

        findUser(users, "Charlie")
            .ifPresentOrElse(
                u -> System.out.println("Found: " + u),
                () -> System.out.println("Charlie not found")
            );

        String upperEmail = findUser(users, "Bob")
            .map(User::email)
            .filter(e -> e.endsWith(".com"))
            .map(String::toUpperCase)
            .orElseThrow(() -> new RuntimeException("Invalid email"));
        System.out.println("Bob's email (upper): " + upperEmail);

        Optional<String> combined = findUser(users, "Alice")
            .flatMap(u -> Optional.ofNullable(u.email()));
        System.out.println("FlatMapped: " + combined);
    }
}