import java.util.Optional;
import java.util.function.*;
public class OptionalUtils {
// Safe value extraction
public static <T> T getValue(Optional<T> optional, T defaultValue) {
return optional.orElse(defaultValue);
}
// Safe value extraction with supplier
public static <T> T getValue(Optional<T> optional, Supplier<T> supplier) {
return optional.orElseGet(supplier);
}
// Throw exception if empty
public static <T> T getValueOrThrow(Optional<T> optional, String message) {
return optional.orElseThrow(() -> new IllegalArgumentException(message));
}
// Map operation
public static <T, R> Optional<R> map(Optional<T> optional, Function<T, R> mapper) {
return optional.map(mapper);
}
// Filter operation
public static <T> Optional<T> filter(Optional<T> optional, Predicate<T> predicate) {
return optional.filter(predicate);
}
// FlatMap operation
public static <T, R> Optional<R> flatMap(Optional<T> optional, Function<T, Optional<R>> mapper) {
return optional.flatMap(mapper);
}
// Conditional execution
public static <T> void ifPresent(Optional<T> optional, Consumer<T> action) {
optional.ifPresent(action);
}
// Conditional execution with else
public static <T> void ifPresentOrElse(Optional<T> optional, Consumer<T> action, Runnable emptyAction) {
optional.ifPresentOrElse(action, emptyAction);
}
}