Add OptionalBoolean.ofOptional() 12/77612/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 8 Nov 2018 10:28:29 +0000 (11:28 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 8 Nov 2018 10:29:39 +0000 (11:29 +0100)
This adds a simple utility method to create symmetry with
fromOptional(). Also cache TRUE/FALSE optionals, so accesses
get a bit faster.

Change-Id: Ife95d26f9b58e6859991d544eda52d0094302c30
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
common/util/src/main/java/org/opendaylight/yangtools/util/OptionalBoolean.java

index 0eb509e98b812f33ff2d79718d8af8d4a0e9de53..84bb6a2e0de6a49c62dcb7557c90644a1c69c2ca 100644 (file)
@@ -25,6 +25,9 @@ import org.eclipse.jdt.annotation.Nullable;
  */
 @Beta
 public final class OptionalBoolean {
+    private static final @NonNull Optional<Boolean> FALSE_OPTIONAL = Optional.of(Boolean.FALSE);
+    private static final @NonNull Optional<Boolean> TRUE_OPTIONAL = Optional.of(Boolean.TRUE);
+
     private static final byte ABSENT = 0;
     private static final byte FALSE = 1;
     private static final byte TRUE = 2;
@@ -113,6 +116,17 @@ public final class OptionalBoolean {
         }
     }
 
+    /**
+     * Convert an {@link Optional} {@link Boolean} into a field value.
+     *
+     * @param value Optional {@link Boolean}.
+     * @return Field value.
+     * @throws NullPointerException if value is null.
+     */
+    public static byte ofOptional(final Optional<Boolean> value) {
+        return ofNullable(value.orElse(null));
+    }
+
     /**
      * Convert a field value into an {@link Optional} {@link Boolean}.
      *
@@ -125,9 +139,9 @@ public final class OptionalBoolean {
             case ABSENT:
                 return Optional.empty();
             case FALSE:
-                return Optional.of(Boolean.FALSE);
+                return FALSE_OPTIONAL;
             case TRUE:
-                return Optional.of(Boolean.TRUE);
+                return TRUE_OPTIONAL;
             default:
                 throw invalidValue(value);
         }