From 88cb7c53f1f57cadc1135740d703bd5bc6c610a9 Mon Sep 17 00:00:00 2001 From: Nikita Date: Tue, 22 Nov 2016 16:31:02 +0300 Subject: [PATCH] Fixed - RMap.getAll doesn't not preserve the order of elements #712 --- .../connection/decoder/MapGetAllDecoder.java | 4 +-- .../java/org/redisson/RedissonMapTest.java | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/connection/decoder/MapGetAllDecoder.java b/redisson/src/main/java/org/redisson/connection/decoder/MapGetAllDecoder.java index 7610a9e0a..2ff9a99da 100644 --- a/redisson/src/main/java/org/redisson/connection/decoder/MapGetAllDecoder.java +++ b/redisson/src/main/java/org/redisson/connection/decoder/MapGetAllDecoder.java @@ -17,7 +17,7 @@ package org.redisson.connection.decoder; import java.io.IOException; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -57,7 +57,7 @@ public class MapGetAllDecoder implements MultiDecoder> { if (parts.isEmpty()) { return Collections.emptyMap(); } - Map result = new HashMap(parts.size()); + Map result = new LinkedHashMap(parts.size()); for (int index = 0; index < args.size()-shiftIndex; index++) { Object value = parts.get(index); if (!allowNulls && value == null) { diff --git a/redisson/src/test/java/org/redisson/RedissonMapTest.java b/redisson/src/test/java/org/redisson/RedissonMapTest.java index c332fed08..81496e16c 100644 --- a/redisson/src/test/java/org/redisson/RedissonMapTest.java +++ b/redisson/src/test/java/org/redisson/RedissonMapTest.java @@ -162,6 +162,31 @@ public class RedissonMapTest extends BaseTest { assertThat(map.valueSize("4")).isZero(); assertThat(map.valueSize("1")).isEqualTo(6); } + + @Test + public void testGetAllOrder() { + RMap map = redisson.getMap("getAll"); + map.put(1, 100); + map.put(2, 200); + map.put(3, 300); + map.put(4, 400); + map.put(5, 500); + map.put(6, 600); + map.put(7, 700); + map.put(8, 800); + + Map filtered = map.getAll(new HashSet(Arrays.asList(2, 3, 5, 1, 7, 8))); + + Map expectedMap = new LinkedHashMap(); + expectedMap.put(1, 100); + expectedMap.put(2, 200); + expectedMap.put(3, 300); + expectedMap.put(5, 500); + expectedMap.put(7, 700); + expectedMap.put(8, 800); + + assertThat(filtered.entrySet()).containsExactlyElementsOf(expectedMap.entrySet()); + } @Test public void testGetAll() {