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]

Reply via email to