aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-09-10 10:58:09 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-09-10 10:58:09 +0200
commit440a39081e32ad634eb27ebfa5eb31b84f9c39e6 (patch)
tree15b28f3bc6e670a0b130e32174c7ed124cbe7d96 /document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java
parent79fbe75a324084d7e871e4aa7b82500e7ccd35b3 (diff)
Before compareTo on a hashmap makes sense it must be sorted.
Diffstat (limited to 'document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java')
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java38
1 files changed, 27 insertions, 11 deletions
diff --git a/document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java
index 6d6c18755c1..bf40546d637 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java
@@ -10,7 +10,16 @@ import com.yahoo.document.serialization.FieldReader;
import com.yahoo.document.serialization.FieldWriter;
import com.yahoo.document.serialization.XmlSerializationHelper;
import com.yahoo.document.serialization.XmlStream;
-import java.util.*;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+
/**
* Vespa map. Backed by and and parametrized by FieldValue
@@ -72,10 +81,7 @@ public class MapFieldValue<K extends FieldValue, V extends FieldValue> extends C
*/
public boolean equals(Object o) {
if (!(o instanceof MapFieldValue)) return false;
- MapFieldValue otherSet = (MapFieldValue) o;
- Map<K, V> map1 = values;
- Map<K, V> map2 = otherSet.values;
- return (super.equals(o) && map1.equals(map2));
+ return super.equals(o) && values.equals(((MapFieldValue) o).values);
}
@Override
@@ -276,14 +282,24 @@ public class MapFieldValue<K extends FieldValue, V extends FieldValue> extends C
return comp;
}
//types are equal, this must be of this type
- MapFieldValue otherValue = (MapFieldValue) fieldValue;
- comp = CollectionComparator.compare(values.keySet(), otherValue.values.keySet());
-
- if (comp != 0) {
- return comp;
+ MapFieldValue<K,V> rhs = (MapFieldValue<K,V>) fieldValue;
+ if (size() < rhs.size()) {
+ return -1;
+ } else if (size() > rhs.size()) {
+ return 1;
+ }
+ Map.Entry<K,V> [] entries = entrySet().toArray(new Map.Entry[size()]);
+ Map.Entry<K,V> [] rhsEntries = rhs.entrySet().toArray(new Map.Entry[rhs.size()]);
+ Arrays.sort(entries, (Map.Entry<K,V> a, Map.Entry<K,V> b) -> { return a.getKey().compareTo(b.getKey()); });
+ Arrays.sort(rhsEntries, (Map.Entry<K,V> a, Map.Entry<K,V> b) -> { return a.getKey().compareTo(b.getKey()); });
+ for (int i = 0; i < entries.length; i++) {
+ comp = entries[i].getKey().compareTo(rhsEntries[i].getKey());
+ if (comp != 0) return comp;
+ comp = entries[i].getValue().compareTo(rhsEntries[i].getValue());
+ if (comp != 0) return comp;
}
- return CollectionComparator.compare(values.values(), otherValue.values.values());
+ return 0;
}
/**