Add LazyCollections.lazyAdd for Sets 86/93686/1
authorIllia <illia.ihushev@pantheon.tech>
Mon, 26 Oct 2020 16:15:39 +0000 (18:15 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 8 Nov 2020 17:02:32 +0000 (18:02 +0100)
This will be used for GenerateType field, which is set of specified
getters.

JIRA: MDSAL-426
Change-Id: I691aa13c88147828890e0639441f607515053af8
Signed-off-by: Illia <illia.ihushev@pantheon.tech>
(cherry picked from commit 7caf3d717451ea9a98b19ab58e175281b5029055)

common/util/src/main/java/org/opendaylight/yangtools/util/LazyCollections.java

index 603039b2ff4ff1ac606f5be3f36585436c907c74..10d53b7716648364a3e57c7e35df495510aa5d11 100644 (file)
@@ -9,7 +9,9 @@ package org.opendaylight.yangtools.util;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Utility methods for lazily instantiated collections. These are useful for situations when we start off with an empty
@@ -44,4 +46,30 @@ public final class LazyCollections {
         ret.add(obj);
         return ret;
     }
+
+    /**
+     * Add an element to a set, potentially transforming the set.
+     *
+     * @param <E> the type of elements in the set
+     * @param set Current set
+     * @param obj Object that needs to be added
+     * @return new set
+     */
+    public static <E> Set<E> lazyAdd(final Set<E> set, final E obj) {
+        final Set<E> ret;
+
+        switch (set.size()) {
+            case 0:
+                return Collections.singleton(obj);
+            case 1:
+                ret = new HashSet<>(4);
+                ret.addAll(set);
+                break;
+            default:
+                ret = set;
+        }
+
+        ret.add(obj);
+        return ret;
+    }
 }