Avoid extracting resoure set from backing range set

This is one of fixes for ONOS-4684

Change-Id: I93cd95317b985f98fd6e72a4f96c7f7d6857f279
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 fdfaf7c..f1b8f89 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
@@ -30,6 +30,7 @@
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * A set of discrete resources that can be encoded as integers.
@@ -88,7 +89,16 @@
     @Override
     public DiscreteResources difference(DiscreteResources other) {
         if (other instanceof EncodableDiscreteResources) {
-            return of(parent, Sets.difference(this.values(), other.values()));
+            EncodableDiscreteResources cast = (EncodableDiscreteResources) other;
+            Map<Class<?>, EncodedDiscreteResources> newMap =
+                    Stream.concat(this.map.entrySet().stream(), cast.map.entrySet().stream())
+                            .filter(entry -> this.map.containsKey(entry.getKey()))
+                            .collect(Collectors.toMap(
+                                    Map.Entry::getKey,
+                                    Map.Entry::getValue,
+                                    EncodedDiscreteResources::difference,
+                                    LinkedHashMap::new));
+            return new EncodableDiscreteResources(parent, newMap);
         } else if (other instanceof EmptyDiscreteResources) {
             return this;
         }