javabeginner
Java Optional — Avoid NullPointerException
Use Optional to handle nullable values safely with map, flatMap, orElse, and ifPresent patterns.
javaPress ⌘/Ctrl + Shift + C to copy
import java.util.Optional;
public class OptionalPatterns {
record User(String name, String email, Address address) {}
record Address(String city, String zip) {}
// Return Optional instead of null
public static Optional<User> findUser(String id) {
if ("1".equals(id)) {
return Optional.of(new User("Alice", "alice@test.com",
new Address("NYC", "10001")));
}
return Optional.empty();
}
public static void main(String[] args) {
// orElse — provide default
String name = findUser("1")
.map(User::name)
.orElse("Unknown");
// orElseThrow — fail if missing
User user = findUser("1")
.orElseThrow(() -> new RuntimeException("User not found"));
// ifPresent — execute if value exists
findUser("1").ifPresent(u ->
System.out.println("Found: " + u.name()));
// Chained navigation (safe null traversal)
String city = findUser("1")
.map(User::address)
.map(Address::city)
.orElse("Unknown city");
System.out.println(city); // NYC
// filter
Optional<User> nycUser = findUser("1")
.filter(u -> "NYC".equals(u.address().city()));
// or — try alternative
User result = findUser("999")
.or(() -> findUser("1"))
.orElseThrow();
System.out.println(result.name()); // Alice
}
}Use Cases
- Eliminating NullPointerException in business logic
- Safe navigation through nested object graphs
- API design with explicit nullable return types
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
javabeginner
Try-With-Resources and AutoCloseable
Manage resources safely with try-with-resources: files, connections, streams, and custom resources.
Best for: Safe resource management preventing leaks
#java#resource-management
javaintermediate
Java Enums — Methods, Fields, and Interfaces
Advanced enum patterns: enums with fields, abstract methods, implementing interfaces, and enum maps.
Best for: Type-safe constants with behavior
#java#enums
javaintermediate
Custom Exception Hierarchy
Design a clean exception hierarchy with custom exceptions, error codes, and exception mapping.
Best for: Consistent error handling across services
#java#exceptions
javaintermediate
Immutable Classes and Defensive Copies
Create truly immutable Java classes with defensive copies, unmodifiable collections, and builder pattern.
Best for: Thread-safe domain objects
#java#immutability