Fix NoSuchElementException reported in ONOS-4763 and ONOS-4757

Change-Id: I973b6c33f02defac3463b6e53ea177056f1f9714
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 7ec9de0..a6a7d08 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
@@ -98,14 +98,25 @@
     public DiscreteResources difference(DiscreteResources other) {
         if (other instanceof EncodableDiscreteResources) {
             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));
+
+            Map<Class<?>, EncodedDiscreteResources> newMap = new LinkedHashMap<>();
+            for (Class<?> key : this.map.keySet()) {
+                EncodedDiscreteResources thisValues = this.map.get(key);
+                if (!cast.map.containsKey(key)) {
+                    newMap.put(key, thisValues);
+                    continue;
+                }
+                EncodedDiscreteResources otherValues = cast.map.get(key);
+                EncodedDiscreteResources diff = thisValues.difference(otherValues);
+                // omit empty resources from a new resource set
+                // empty EncodedDiscreteResources can't deserialize due to
+                // inability to reproduce a Class<?> instance from the serialized data
+                if (diff.isEmpty()) {
+                    continue;
+                }
+                newMap.put(key, diff);
+            }
+
             return of(parent, newMap);
         } else if (other instanceof EmptyDiscreteResources) {
             return this;