diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java index a01db6a02..6054602f6 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java @@ -16,6 +16,7 @@ package org.redisson.client.protocol.decoder; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -34,7 +35,7 @@ public class ObjectMapEntryReplayDecoder implements MultiDecoder> decode(List parts, State state) { - Map result = new HashMap(parts.size()/2); + Map result = new LinkedHashMap(parts.size()/2); for (int i = 0; i < parts.size(); i++) { if (i % 2 != 0) { result.put(parts.get(i-1), parts.get(i)); diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapReplayDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapReplayDecoder.java index 884c72898..4e84eed88 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapReplayDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapReplayDecoder.java @@ -15,7 +15,7 @@ */ package org.redisson.client.protocol.decoder; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -32,7 +32,7 @@ public class ObjectMapReplayDecoder implements MultiDecoder> @Override public Map decode(List parts, State state) { - Map result = new HashMap(parts.size()/2); + Map result = new LinkedHashMap(parts.size()/2); for (int i = 0; i < parts.size(); i++) { if (i % 2 != 0) { result.put(parts.get(i-1), parts.get(i)); diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectSetReplayDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectSetReplayDecoder.java index 3098f11dc..c3aebefdb 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectSetReplayDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectSetReplayDecoder.java @@ -16,6 +16,7 @@ package org.redisson.client.protocol.decoder; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -32,7 +33,7 @@ public class ObjectSetReplayDecoder implements MultiDecoder> { @Override public Set decode(List parts, State state) { - return new HashSet(parts); + return new LinkedHashSet(parts); } @Override diff --git a/redisson/src/test/java/org/redisson/RedissonMapTest.java b/redisson/src/test/java/org/redisson/RedissonMapTest.java index c57434c73..fc1f31284 100644 --- a/redisson/src/test/java/org/redisson/RedissonMapTest.java +++ b/redisson/src/test/java/org/redisson/RedissonMapTest.java @@ -4,11 +4,14 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.Serializable; import java.util.AbstractMap; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentMap; @@ -345,6 +348,37 @@ public class RedissonMapTest extends BaseTest { assertThat(map.size()).isEqualTo(1); } + @Test + public void testOrdering() { + Map map = new LinkedHashMap(); + + // General player data + map.put("name", "123"); + map.put("ip", "4124"); + map.put("rank", "none"); + map.put("tokens", "0"); + map.put("coins", "0"); + + // Arsenal player statistics + map.put("ar_score", "0"); + map.put("ar_gameswon", "0"); + map.put("ar_gameslost", "0"); + map.put("ar_kills", "0"); + map.put("ar_deaths", "0"); + + RMap rmap = redisson.getMap("123", StringCodec.INSTANCE); + rmap.putAll(map); + + assertThat(rmap.keySet()).containsExactlyElementsOf(map.keySet()); + assertThat(rmap.readAllKeySet()).containsExactlyElementsOf(map.keySet()); + + assertThat(rmap.values()).containsExactlyElementsOf(map.values()); + assertThat(rmap.readAllValues()).containsExactlyElementsOf(map.values()); + + assertThat(rmap.entrySet()).containsExactlyElementsOf(map.entrySet()); + assertThat(rmap.readAllEntrySet()).containsExactlyElementsOf(map.entrySet()); + } + @Test public void testPutAll() { Map map = redisson.getMap("simple");