diff --git a/src/main/java/org/springframework/data/util/Optionals.java b/src/main/java/org/springframework/data/util/Optionals.java index 1921881a6..90f3ac186 100644 --- a/src/main/java/org/springframework/data/util/Optionals.java +++ b/src/main/java/org/springframework/data/util/Optionals.java @@ -15,13 +15,12 @@ */ package org.springframework.data.util; -import lombok.experimental.UtilityClass; - import java.util.Arrays; import java.util.Iterator; import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Stream; @@ -34,10 +33,7 @@ import org.springframework.util.Assert; * @author Oliver Gierke * @author Christoph Strobl */ -@UtilityClass -public class Optionals { - - private static final Object SUCCESS = new Object(); +public interface Optionals { /** * Returns whether any of the given {@link Optional}s is present. @@ -165,15 +161,15 @@ public class Optionals { * @param right must not be {@literal null}. * @param consumer must not be {@literal null}. */ - public static Optional ifAllPresent(Optional left, Optional right, BiConsumer consumer) { + public static void ifAllPresent(Optional left, Optional right, BiConsumer consumer) { Assert.notNull(left, "Optional must not be null!"); Assert.notNull(right, "Optional must not be null!"); Assert.notNull(consumer, "Consumer must not be null!"); - return mapIfAllPresent(left, right, (l, r) -> { + mapIfAllPresent(left, right, (l, r) -> { consumer.accept(l, r); - return SUCCESS; + return null; }); } @@ -195,11 +191,23 @@ public class Optionals { return left.flatMap(l -> right.map(r -> function.apply(l, r))); } - public static void ifBothAbsent(Optional left, Optional right, Supplier supplier) - throws T { + /** + * Invokes the given {@link Consumer} if the {@link Optional} is present or the {@link Runnable} if not. + * + * @param optional must not be {@literal null}. + * @param consumer must not be {@literal null}. + * @param runnable must not be {@literal null}. + */ + public static void ifPresentOrElse(Optional optional, Consumer consumer, Runnable runnable) { + + Assert.notNull(optional, "Optional must not be null!"); + Assert.notNull(consumer, "Consumer must not be null!"); + Assert.notNull(runnable, "Runnable must not be null!"); - if (!left.isPresent() && !right.isPresent()) { - throw supplier.get(); + if (optional.isPresent()) { + optional.ifPresent(consumer); + } else { + runnable.run(); } } }