JAMES-2529 Introduce OptionalUtils::matches
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1d889b71 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1d889b71 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1d889b71 Branch: refs/heads/master Commit: 1d889b711ec446e4bd7a03ef8a7fc8c70a924477 Parents: 5b2f53e Author: Benoit Tellier <[email protected]> Authored: Mon Oct 29 11:17:51 2018 +0700 Committer: Benoit Tellier <[email protected]> Committed: Wed Oct 31 08:48:30 2018 +0700 ---------------------------------------------------------------------- .../org/apache/james/util/OptionalUtils.java | 9 ++++ .../apache/james/util/OptionalUtilsTest.java | 50 ++++++++++++++++++++ 2 files changed, 59 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/1d889b71/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java ---------------------------------------------------------------------- diff --git a/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java b/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java index 4d458cd..01cd535 100644 --- a/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java +++ b/server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java @@ -20,6 +20,7 @@ package org.apache.james.util; import java.util.Arrays; import java.util.Optional; +import java.util.function.BiPredicate; import java.util.function.Supplier; import java.util.stream.Stream; @@ -78,4 +79,12 @@ public class OptionalUtils { .filter(value -> !value.equals(storeValue)) .isPresent(); } + + public static <T, U> boolean matches(Optional<T> optional1, Optional<U> optional2, BiPredicate<T, U> biPredicate) { + return optional1.map(value1 -> + optional2 + .map(value2 -> biPredicate.test(value1, value2)) + .orElse(false)) + .orElse(false); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/1d889b71/server/container/util/src/test/java/org/apache/james/util/OptionalUtilsTest.java ---------------------------------------------------------------------- diff --git a/server/container/util/src/test/java/org/apache/james/util/OptionalUtilsTest.java b/server/container/util/src/test/java/org/apache/james/util/OptionalUtilsTest.java index c0cf551..733e3e1 100644 --- a/server/container/util/src/test/java/org/apache/james/util/OptionalUtilsTest.java +++ b/server/container/util/src/test/java/org/apache/james/util/OptionalUtilsTest.java @@ -234,4 +234,54 @@ public class OptionalUtilsTest { assertThat(OptionalUtils.containsDifferent(Optional.of("any"), "other")).isTrue(); } + @Test + public void matchesShouldReturnFalseWhenFirstOptionalIsEmpty() { + assertThat( + OptionalUtils.matches( + Optional.empty(), + Optional.of(42), + Integer::equals)) + .isFalse(); + } + + @Test + public void matchesShouldReturnFalseWhenSecondOptionalIsEmpty() { + assertThat( + OptionalUtils.matches( + Optional.of(42), + Optional.empty(), + Integer::equals)) + .isFalse(); + } + + @Test + public void matchesShouldReturnFalseWhenBothOptionalsAreEmpty() { + assertThat( + OptionalUtils.matches( + Optional.empty(), + Optional.empty(), + Integer::equals)) + .isFalse(); + } + + @Test + public void matchesShouldReturnFalseWhenConditionIsNotMatching() { + assertThat( + OptionalUtils.matches( + Optional.of(42), + Optional.of(43), + Integer::equals)) + .isFalse(); + } + + @Test + public void matchesShouldReturnTrueWhenConditionIsMatching() { + assertThat( + OptionalUtils.matches( + Optional.of(42), + Optional.of(42), + Integer::equals)) + .isTrue(); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
