From fe5d543ff2af72f856e2aea27ca99898fd4a36d3 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 22 Mar 2017 23:14:33 +0100 Subject: [PATCH] DATACMNS-867 - Further refinements to Optionals. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made ifAllPresent(…) void as the returned value is never used. Added ifPresentOrElse(…). --- .../springframework/data/util/Optionals.java | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) 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(); } } }