Avoid unnecessary allocations needed to convert List to Set

Change-Id: I80b0bcf31f625f8e151155880075c888a0cf1c1d
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
index 3b8273f..69645b1 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
@@ -48,6 +48,7 @@
 
 import java.util.Collection;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -333,14 +334,14 @@
         // it's assumed that the passed "values" is non-empty
 
         // This is 2-pass scan. Nicer to have 1-pass scan
-        List<DiscreteResource> discreteValues = values.stream()
+        Set<DiscreteResource> discreteValues = values.stream()
                 .filter(x -> x instanceof DiscreteResource)
                 .map(x -> (DiscreteResource) x)
-                .collect(Collectors.toList());
-        List<ContinuousResource> continuousValues = values.stream()
+                .collect(Collectors.toCollection(LinkedHashSet::new));
+        Set<ContinuousResource> continuousValues = values.stream()
                 .filter(x -> x instanceof ContinuousResource)
                 .map(x -> (ContinuousResource) x)
-                .collect(Collectors.toList());
+                .collect(Collectors.toCollection(LinkedHashSet::new));
 
         return discreteTxStore.register(key, discreteValues)
                 && continuousTxStore.register(key, continuousValues);
@@ -362,14 +363,14 @@
         // it's assumed that the passed "values" is non-empty
 
         // This is 2-pass scan. Nicer to have 1-pass scan
-        List<DiscreteResource> discreteValues = values.stream()
+        Set<DiscreteResource> discreteValues = values.stream()
                 .filter(x -> x instanceof DiscreteResource)
                 .map(x -> (DiscreteResource) x)
-                .collect(Collectors.toList());
-        List<ContinuousResource> continuousValues = values.stream()
+                .collect(Collectors.toCollection(LinkedHashSet::new));
+        Set<ContinuousResource> continuousValues = values.stream()
                 .filter(x -> x instanceof ContinuousResource)
                 .map(x -> (ContinuousResource) x)
-                .collect(Collectors.toList());
+                .collect(Collectors.toCollection(LinkedHashSet::new));
 
         return discreteTxStore.unregister(key, discreteValues)
                 && continuousTxStore.unregister(key, continuousValues);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DiscreteResources.java
index 3b39120..6c65122 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DiscreteResources.java
@@ -18,7 +18,6 @@
 import org.onosproject.net.resource.DiscreteResource;
 import org.onosproject.net.resource.DiscreteResourceId;
 
-import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
@@ -75,7 +74,7 @@
      * @return true this instance contains a resource included in the given resources,
      * otherwise false.
      */
-    boolean containsAny(List<DiscreteResource> other);
+    boolean containsAny(Set<DiscreteResource> other);
 
     /**
      * Returns a union set of this instance and the given instance.
@@ -93,7 +92,7 @@
      * @param removed resources
      * @return a new DiscreteResources instance representing a difference set
      */
-    DiscreteResources remove(List<DiscreteResource> removed);
+    DiscreteResources remove(Set<DiscreteResource> removed);
 
     /**
      * Returns all of resources this instance holds.
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EmptyDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EmptyDiscreteResources.java
index 6699787..87da883 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EmptyDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EmptyDiscreteResources.java
@@ -19,7 +19,6 @@
 import org.onosproject.net.resource.DiscreteResource;
 import org.onosproject.net.resource.DiscreteResourceId;
 
-import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
@@ -48,7 +47,7 @@
     }
 
     @Override
-    public boolean containsAny(List<DiscreteResource> other) {
+    public boolean containsAny(Set<DiscreteResource> other) {
         return false;
     }
 
@@ -58,7 +57,7 @@
     }
 
     @Override
-    public DiscreteResources remove(List<DiscreteResource> removed) {
+    public DiscreteResources remove(Set<DiscreteResource> removed) {
         return this;
     }
 
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
index 7d0ad68..0f3b43c 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
@@ -23,7 +23,6 @@
 
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -97,7 +96,7 @@
     }
 
     @Override
-    public boolean containsAny(List<DiscreteResource> other) {
+    public boolean containsAny(Set<DiscreteResource> other) {
         return other.stream()
                 .anyMatch(x -> values().contains(x));
     }
@@ -110,8 +109,8 @@
     }
 
     @Override
-    public DiscreteResources remove(List<DiscreteResource> removed) {
-        return of(parent, Sets.difference(values(), new LinkedHashSet<>(removed)));
+    public DiscreteResources remove(Set<DiscreteResource> removed) {
+        return of(parent, Sets.difference(values(), removed));
     }
 
     @Override
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
index 161f1ff..94e3c62 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
@@ -22,7 +22,6 @@
 import org.onosproject.net.resource.Resources;
 
 import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
@@ -68,7 +67,7 @@
     }
 
     @Override
-    public boolean containsAny(List<DiscreteResource> other) {
+    public boolean containsAny(Set<DiscreteResource> other) {
         return other.stream().anyMatch(values::contains);
     }
 
@@ -82,10 +81,8 @@
 
     // returns a new instance, not mutate the current instance
     @Override
-    public DiscreteResources remove(List<DiscreteResource> removed) {
-        Set<DiscreteResource> newValues = new LinkedHashSet<>(this.values);
-        newValues.removeAll(removed);
-        return new GenericDiscreteResources(newValues);
+    public DiscreteResources remove(Set<DiscreteResource> removed) {
+        return of(Sets.difference(this.values, removed));
     }
 
     @Override
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceSubStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceSubStore.java
index 108d858..3569b90 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceSubStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceSubStore.java
@@ -28,7 +28,6 @@
 import org.slf4j.LoggerFactory;
 
 import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -61,13 +60,12 @@
                 .findFirst();
     }
 
-    boolean register(DiscreteResourceId key, List<ContinuousResource> values) {
+    boolean register(DiscreteResourceId key, Set<ContinuousResource> requested) {
         // short-circuit: receiving empty resource is regarded as success
-        if (values.isEmpty()) {
+        if (requested.isEmpty()) {
             return true;
         }
 
-        Set<ContinuousResource> requested = new LinkedHashSet<>(values);
         Set<ContinuousResource> oldValues = childMap.putIfAbsent(key, requested);
         if (oldValues == null) {
             return true;
@@ -94,7 +92,7 @@
         return childMap.replace(key, oldValues, newValues);
     }
 
-    boolean unregister(DiscreteResourceId key, List<ContinuousResource> values) {
+    boolean unregister(DiscreteResourceId key, Set<ContinuousResource> values) {
         // short-circuit: receiving empty resource is regarded as success
         if (values.isEmpty()) {
             return true;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceSubStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceSubStore.java
index e98cb20..d2cecb0 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceSubStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceSubStore.java
@@ -24,9 +24,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 
 import static org.onosproject.store.resource.impl.ConsistentResourceStore.SERIALIZER;
 
@@ -54,13 +53,13 @@
         return values.lookup(id);
     }
 
-    boolean register(DiscreteResourceId key, List<DiscreteResource> values) {
+    boolean register(DiscreteResourceId key, Set<DiscreteResource> values) {
         // short-circuit: receiving empty resource is regarded as success
         if (values.isEmpty()) {
             return true;
         }
 
-        DiscreteResources requested = DiscreteResources.of(new LinkedHashSet<>(values));
+        DiscreteResources requested = DiscreteResources.of(values);
         DiscreteResources oldValues = childMap.putIfAbsent(key, requested);
         if (oldValues == null) {
             return true;
@@ -77,7 +76,7 @@
         return childMap.replace(key, oldValues, newValues);
     }
 
-    boolean unregister(DiscreteResourceId key, List<DiscreteResource> values) {
+    boolean unregister(DiscreteResourceId key, Set<DiscreteResource> values) {
         // short-circuit: receiving empty resource is regarded as success
         if (values.isEmpty()) {
             return true;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
index 7b15a0a..ceb115d 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
@@ -21,7 +21,6 @@
 import org.onosproject.net.resource.Resources;
 
 import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -75,9 +74,9 @@
     }
 
     @Override
-    public boolean containsAny(List<DiscreteResource> other) {
-        Map<Boolean, List<DiscreteResource>> partitioned = other.stream()
-                .collect(Collectors.partitioningBy(CODECS::isEncodable));
+    public boolean containsAny(Set<DiscreteResource> other) {
+        Map<Boolean, Set<DiscreteResource>> partitioned = other.stream()
+                .collect(Collectors.partitioningBy(CODECS::isEncodable, Collectors.toCollection(LinkedHashSet::new)));
         return generics.containsAny(partitioned.get(false)) || encodables.containsAny(partitioned.get(true));
     }
 
@@ -87,8 +86,8 @@
     }
 
     @Override
-    public DiscreteResources remove(List<DiscreteResource> removed) {
-        return of(Sets.difference(values(), new LinkedHashSet<>(removed)));
+    public DiscreteResources remove(Set<DiscreteResource> removed) {
+        return of(Sets.difference(values(), removed));
     }
 
     @Override